きっとあなたはWindowsを使っているでしょう?
>>> a = "café"
>>> a
'caf\x82'
>>> print a
café
>>> a.decode("cp850") # DOS codepage 850 --> Unicode
u'caf\xe9'
>>> a.decode("cp850").encode("cp1252") # DOS 850 --> Unicode --> Windows 1252
'caf\xe9' # identical to Unicode codepoint
>>> print a.decode("cp850").encode("cp1252") # Display a cp1252 string in cp850
cafÚ
encoding="cp1252"
代わりに使用すると、機能するはずです。
説明:(当て推量あり)
cmd
Windowsはcp850
デフォルトのコードページとして使用します。これは、上記の私のセッションの2行目から明らか0x82
です。é
cp850
- 上記のセッションの最後の行に示されているように、 Windowsで起動されたPythonプログラムは
cp1252
、標準のエンコーディングとして使用されているようです。é
0xe9
cp1252
- これは、この文字列をファイルに書き込むときにも明らかです(デフォルトでは
cp1252
)を使用します。
そうすると、にあるため、ファイルの内容としてf.write(a)
取得されます)。
私がそうするならば、私は得る。caf,
,
0x82
cp1252
f.write(a.decode("cp850").encode("cp1252"))
café
道徳:環境内の正しいエンコーディングを見つけ、すべてをできるだけ早くUnicodeに変換し、それを操作してから、必要なエンコーディングに変換し直します。インタラクティブウィンドウに出力する場合はを使用cp850
し、ファイルに出力する場合はを使用しますcp1252
。
または、Python 3に切り替えると、これらすべてがはるかに簡単になります。