5

UTF-8 でエンコードされた文字で構成される文字列を作成する定義があります。出力ファイルは、'w+', "utf-8"引数を使用して開かれます。

しかし、私がしようとするx.write(string)と、UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 1: ordinal not in range(128)

これは、通常、たとえば「print(u'something')」を実行するためだと思います。しかし、変数を使用する必要があり、u' _ ' の引用符はそれを否定します...

助言がありますか?

編集:ここに実際のコード:

source = codecs.open("actionbreak/" + target + '.csv','r', "utf-8")
outTarget = codecs.open("actionbreak/" + newTarget, 'w+', "utf-8")
x = str(actionT(splitList[0], splitList[1]))
outTarget.write(x)

基本的に、これが行うことになっているのは、次のような文字列を大量に作成することだけです。

[日木曜 Deliverables]= CASE WHEN things = 11 THEN C ELSE 0 END

4

3 に答える 3

5

を使用していcodecs.open()ますか? Python 2.7 のビルトインopen()は特定のエンコーディングをサポートしていません。つまり、ASCII 以外の文字列を手動でエンコードする必要があります (他の人が指摘しているように) codecs.open()


あなたが実際に を使用しているcodecs.open()ので、追加したコードを見て、自分で少し調べた後、入力および/または出力ファイルを encoding"utf-8-sig"で開くことをお勧めします。これにより、UTF-8 の BOM が自動的に処理されます ( httpを参照)。 ://docs.python.org/2/library/codecs.html#encodings-and-unicode、セクションの下部近く) 入力ファイルにのみ問題になると思いますが、それらの組み合わせのいずれも (utf -8-sig/utf-8, utf-8/utf-8-sig, utf-8-sig/utf-8-sig) が動作する場合、最も可能性の高い状況は、入力ファイルがPython のデフォルトの UTF-8 コーデックは BOM を通常の文字として解釈するため、BOM を使用した異なる Unicode 形式を使用するため、入力には問題はありませんが、出力には問題が発生する可能性があります。


これに気づきましたが... を使用するcodecs.open()と、エンコードされた文字列ではなく、Unicode 文字列が想定されます。試してみてくださいx = unicode(actionT(splitList[0], splitList[1]))

Unicode 文字列をデコードしようとしたときにもエラーが発生する可能性があります ( http://wiki.python.org/moin/UnicodeEncodeErrorを参照)。actionT()非 Unicode 文字列として扱われる原因となる文字列。

于 2013-07-10T18:08:11.587 に答える
1

xgord は正しいですが、さらに啓発するために、正確に何\ufeffを意味するのかを指摘する価値があります。BOMこれは aまたは aとして知られておりbyte order mark、基本的には、Unicode をどの方向に進めたいかについて人々が同意できなかった初期の Unicode へのコールバックです。現在、すべての Unicode ドキュメントは、バイトを配置する順序に応じて、\ufeffまたは のいずれかで始まります。\uffef

最初の場所でこれらの文字にエラーが発生した場合、問題はそれを utf-8 としてデコードしようとしていないことであり、おそらくファイルはまだ正常です。

于 2013-07-10T18:07:59.970 に答える