PythonでUnicode文字列インジケータをグローバルに抑制する方法はありますか?私はアプリケーション内でUnicodeを使って排他的に作業していて、たくさんのインタラクティブなことをしています。私のすべてのデバッグ出力にu'prefix 'が表示されるようにすることは、不要で厄介です。オフにできますか?
Python 3.0を使うことができます。デフォルトの文字列型はUnicodeです。u''
接頭辞は不要になりました。
一言で言えば、いいえ。これを無効にすることはできません。
のu
から来るunicode.__repr__
REPLで内容を表示するために使用されるメソッド。
>>> print repr(unicode('a'))
u'a'
>>> unicode('a')
u'a'
私が誤解していなければ、Pythonを再コンパイルせずにこれを上書きすることはできません。
これを回避する最も簡単な方法は、単に文字列を印刷することです。
>>> print unicode('a')
a
あなたが使用する場合unicode()
すべての文字列を構築するように組み込まれているので、次のようなことができます。
>>> class unicode(unicode):
... def __repr__(self):
... return __builtins__.unicode.__repr__(self).lstrip("u")
...
>>> unicode('a')
a
..それをしないでください、それは恐ろしいです。
HTMLテンプレートの一部としてpythonを使用してJavaScriptを設定していたため、uプレフィックスを削除する必要がある場合がありました。簡単な出力では、辞書キーのためにu接頭辞を残しました。
var turns = [{u'armies':2...];
JavaScriptを壊します。
必要な出力Javascriptを取得するために、私は私のために文字列をエンコードするのにjson pythonモジュールを使用しました:
turns = json.dumps(turns)
これは私の特定のケースではうまくいきますが、キーはすべてASCIIなので、エンコードについて心配する必要はありません。あなたはおそらくあなたのデバッグ出力にこのトリックを使用することができます。
使うstr( text )
あなたのPythonのデフォルトエンコーディングと文字列の正確な内容の両方について100%確信が持てないときはいつでも、実際にはやや悪い考えです - 後者はインターネットから取り出されたテキストのために典型的でしょう。また、やりたいことに応じて、print text.encode( 'utf-8' )
またはprint repr( text.encode( 'utf-8' ) )
次のような読めないコードポイントでレンダリングがいっぱいになる可能性があるため、期待外れの結果が生じる可能性があります。\x3a
。
私は最適なのは本当にUnicode対応のコマンドライン(ウィンドウズの下では難しい、Linuxの下では簡単)を利用してpython 2.xからpython 3.xに切り替えることであると思います。新しいpython 3シリーズによってもたらされるテキスト対バイト処理の容易さと明瞭さは、本当に期待できる大きな利点の1つです。これは 'bytes'と 'text'の区別を学ぶために少し時間をかけて文字エンコーディングの概念を理解する必要があることを意味しますが、その時間はpython 3環境ではこれらに対するpythonの新しいアプローチとしてはるかによく使われます。厄介な問題は、python 2が提供しなければならなかったものよりもはるかに明確でエラーが起こりにくいものです。私はこれまで振り返ってみると問題のあるユニコードへのpython 2のアプローチを呼ぶことにしましたが、私はそれを優れたものと考えていました---この問題がphpで処理される方法。
編集する私は立ち寄った関連ディスカッションここでSOについて、最近のphpがUnicode /エンコーディングの問題に取り組むように思われる方法についてのこのコメントを見つけました:
それはマウスが食べようとしているようなものです 象。 Unicodeを ASCIIの拡張子 文字列、そしてmb_strings) 間違ったやり方で物事を進めます。 特別なケースが何であるかにハングアップする で文字を扱うために必要 より多くを必要とするおかしいsquiggles 1バイトUnicodeをとして扱うなら 抽象的な空間を提供する 必要な文字、ASCIIは 何の必要もなくその中に収容 特別な場合として扱います。
私の経験では、SO python + unicodeの全トピックの90%は、ASCIIやlatin-1で晴れていた人々から来ているように思われるので、これをここで引用します。それから基本的にそれを取り除きたいだけです。 python 3に切り替えるときにすることはまさに上記のコメント投稿者がすることを示唆していることです:Unicodeをasciiの厄介な拡張として見る代わりに、あなたはサブセットとしてascii(そしてあなたが遭遇する他のほとんどすべてのエンコーディング)を見るようになりますUnicodeの)。
確かに、Unicode v6は確かにエンコーディングの最後の単語ではありませんが、2011年にあなたが得ることができるのと同じくらい普遍的なものに近いです。それに慣れてください。
from __future__ import unicode_literals
Python 2.6(2008年10月1日リリース)以降に利用可能です。 Python 3ではデフォルトです。
省略することができますu''
変更されませんが、ソースコードに接頭辞を付けます。repr(unicode_string)
それは誤解を招くでしょう。
あなたは上書きすることができますsys.displayhook()
PythonのREPLでは、オブジェクトを表示するのは好きです。上書きすることもできます__repr__
あなた自身のカスタムオブジェクトのために。
type("")
新鮮なPython REPLでは、あなたは見るべきです<type 'str'>
。次に実行します。from __future__ import unicode_literals
そして繰り返すtype("")
。今、あなたは見るべきです<type 'unicode'>
。あなたの環境は何ですか(OS、pythonバージョン)? - jfs
これは大域的なオプションではないことを私は知っていますが、文字列をstr()関数に入れることでUnicode uを抑制することもできます。
そのため、Unicode派生リストは次のようになります。
>>> myList=[unicode('a'),unicode('b'),unicode('c')]
>>> myList
[u'a', u'b', u'c']
これになるだろう:
>>> myList=[str(unicode('a')),str(unicode('b')),str(unicode('c'))]
>>> myList
['a', 'b', 'c']
少し面倒ですが、誰かに役立つかもしれません
u
どこかで、あなたはひどい間違ったことをしています。 @itsricky、あなたはおそらくPHPでPython reprをパースしようとしているのではなく、JSONにエンコードしたいと思うでしょう! - Eevee
念のためにあなたがこのようなものを得ているu['hello']
それならあなたは配列を印刷しなければなりません。印刷するstr(arr[0])
そしてあなたは行ってもいいです。
ユニコードではわかりませんが、一般的にあなたは呼び出すことができますstr.encode()
より適切な形式に変換します。たとえば、Python 3.0以降でキャプチャされたサブプロセスの出力は、それをバイトストリーム(接頭辞 'b')としてキャプチャし、encode()は通常の文字列形式に修正します。
私のために働いているようです:
import ast
import json
j = json.loads('{"one" : "two"}')
j
dd = {u'one': u'two'}
dd
# to get double quotes
json.dumps(j, encoding='ascii')
json.dumps(dd, encoding='ascii')
# to get single quotes
str(ast.literal_eval(json.dumps(j, encoding='ascii')))
str(ast.literal_eval(json.dumps(dd, encoding='ascii')))
出力:
>>> {u'one': u'two'}
>>> {u'one': u'two'}
>>> '{"one": "two"}'
>>> '{"one": "two"}'
>>> "{'one': 'two'}"
>>> "{'one': 'two'}"
自明のとおり、上記は辞書およびJSONオブジェクトに対して機能します。
単なる文字列の場合は、str()でラップするとうまくいくようです。
s=u'test string'
s
str(s)
出力:
>>> u'test string'
>>> 'test string'
Pythonバージョン:2.7.12
以下を試してください
str(result.url)を表示します。
デフォルトのエンコーディングが変更された可能性があります。
あなたは以下であなたのデフォルトエンコーディングをチェックすることができます: -
> import sys
> print sys.getdefaultencoding()
> ascii
デフォルトはasciiであるべきで、これはu'string 'が' string 'として表示されるべきだがあなたのものが変更されたかもしれないことを意味します。
あなたが使用する必要がありますprint str(your_Variable)
Python 3に更新したくない場合は、部分文字列を利用することができます。 たとえば、元の出力が(u'mystring '、)だったとします。例として、変数rowにunicode接頭辞のない "mystring"という文字列が含まれているとしましょう。それからあなたはこのような何かをしたいでしょう:
temp = str(row); #str is not necessary, but probably good practice
temp = temp[:-3];
print = temp[3:];