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