2016-03-21 3 views
0

のために私は、JSONに存在する値で埋めセットを持って、私は私のセットを印刷するとき、私は次の出力を得た:Pythonでアクセント:構造とループ

set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma']) 

が、私はそれぞれを印刷する場合私は、各単語について同じエンコーディングを持っていないのはなぜ

Pathé 
Synergy Cinéma 

:私は次の出力を持っているforループを使用して要素?

答えて

1

私はあなたがPython 2を使用していると思いますが、デフォルトのエンコード動作に関連している可能性があります。あなたのセットに保管されている値は "符号化された"値であり、__repr__および/または__str__オブジェクトのメソッドに基づいたprintを使用すると、(デフォルトのシステムエンコーディングに従って)デコードされた/フォーマットされた出力が得られます。

あなたのpython 3に、エンコーディングが(つまり、デフォルトでutf-8であることを機能sys.getdefaultencoding()

注意して使用されるデフォルトのエンコーディングに関する情報を取得することができます。デフォルトでは、「作成した任意の文字列(...)は、Unicodeとして保存されています"、documentation)、あなたはまったく同じ動作をしません(python 2スニペットで、ハッシュ値は、Python setのように、入力文字列がエンコードされている場合と同じですない):

Python 2:

>>> a = b'Path\xc3\xa9' 
>>> a 
'Path\xc3\xa9' 
>>> print(a) 
Pathé 
>>> sys.getdefaultencoding() 
'ascii' 
>>> hash('Pathé') 
8776754739882320435 
>>> hash(b'Path\xc3\xa9') 
8776754739882320435 

のPython 3:

>>> a = b'Path\xc3\xa9' 
>>> a 
b'Path\xc3\xa9' 
>>> print(a) 
b'Path\xc3\xa9' 
>>> print(a.decode()) 
Pathé 
>>> sys.getdefaultencoding() 
'utf-8' 
>>> hash("Pathé") 
1530394699459763000 
>>> hash(b"Path\xc3\xa9") 
1621747577200686773