3

重複の可能性:
Python で utf-8 ファイルに書き込む

CSV ファイルに書き込みたい Unicode 文字列 (日本語の文字を含む) があります。""ただし、BOM は1 行目の文字列だけで、正しく記述されていないようです。これにより、Excel で日本語の文字が正しく表示されません。Notepad++でCSVを開くと、文字が正しく表示されます。

fileObj = codecs.open(filename,"w",'utf-8')
fileObj.write(codecs.BOM_UTF8)
c = u';'
for s in stringsToWrite:
   line = e.someUnicodeString
   fileObj.write(line)
fileObj.close()
4

2 に答える 2

8
fileObj = codecs.open(filename,"w",'utf-8')

OK、Unicode 出力ストリームができました。

fileObj.write(codecs.BOM_UTF8)

BOM_UTF8 は一連のバイトであり、Unicode ストリームへの書き込みが想定されるような Unicode 文字列ではありません。Python は、正しくない可能性のあるエンコーディングを使用して、バイトから Unicode に自動的に変換します。デフォルトのエンコーディングが UTF-8 ではなく Windows コード ページ 1252 である場合、BOM を効果的に二重エンコーディングすることになり、.

代わりに、BOM を Unicode 文字として書くことを提案します。

fileObj.write(u'\uFEFF')

InternetSeriousBusiness は次のように書いています。

とにかく、UTF-8 BOM は推奨されませんか? –

はい、UTF-8 の偽の BOM はほとんどのコンテキストで大惨事ですが、Excel の文字セット推測で UTF-8 を取得するために必要です。残念ながら、Excel for Mac では機能しません。別の可能なアプローチは、UTF-16 を使用することです。

于 2012-08-30T09:47:57.320 に答える
0

コピーした文字列UTF-8 BOM です。したがって、問題はPythonコードではなく、別の場所にあります。

于 2012-08-29T14:36:46.060 に答える