のために私は、JSONに存在する値で埋めセットを持って、私は私のセットを印刷するとき、私は次の出力を得た:Pythonでアクセント:構造とループ
set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma'])
が、私はそれぞれを印刷する場合私は、各単語について同じエンコーディングを持っていないのはなぜ
Pathé
Synergy Cinéma
:私は次の出力を持っているforループを使用して要素?
のために私は、JSONに存在する値で埋めセットを持って、私は私のセットを印刷するとき、私は次の出力を得た:Pythonでアクセント:構造とループ
set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma'])
が、私はそれぞれを印刷する場合私は、各単語について同じエンコーディングを持っていないのはなぜ
Pathé
Synergy Cinéma
:私は次の出力を持っているforループを使用して要素?
私はあなたが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