2017-06-26 7 views
1

私は、次のPythonコードを持っている:なぜunicodecsvは正しく書き込まれませんか?

import unicodecsv as csv 
import sys 

with open("unicode_test.csv", "w+b") as csv_file: 
    writer = csv.writer(csv_file, encoding="utf-8") 
    writer.writerow([u'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf\xe4\xb8\x96\xe7\x95\x8c']) 

これは "こんにちは世界" と言うCSVを作成する必要があります。代わりに、それは不気味な記述です。 16進エディタで最終製品を調べると、類似点が表示されます。EX YY ZZはC3 AX C2 YY C2 ZZに変換されますが、方法はわかりません。

私はWindows 10でPython 2.7.11を実行していますが、sys.stdout.encodingではコンソールに "cp437"と表示されています。

+1

本当に答えはありませんが、 'unicode'を使って作業しているときに、Python 3でユニコードを扱う複雑な方法(とそれに関連する断続的なバグ)を解くよりも、プロジェクト全体をPython 3に移植する方が簡単です。できれば、Python 3を使う価値があります。 – Paul

+2

'\ xe3 \ x81 \ x93'は、「こ」のUTF-8でエンコードされたバイトです。これをUnicode文字列として扱い、UTF-8 *として再度エンコーディングすることは正しくありません。それをバイト文字列として扱い、標準の 'csv'モジュールを使うか、@Sahanが示しているように正しいUnicode文字列を使います。 –

答えて

3

ソースファイルの先頭に、このようなソースコードのエンコーディングを設定してみること:さらに上の読みについて

# coding=utf-8 
import unicodecsv as csv 
import sys 

with open("unicode_test.csv", "w+b") as csv_file: 
    writer = csv.writer(csv_file, encoding="utf-8") 
    writer.writerow([u'こんにちは世界']) 

# coding=utf-8 

だから、あなたの全体のソリューションは次のようになります。ユニコード文字リテラルを使用すると、Python Unicode HOWTOの文書を確認できます

どうすればいいですか

関連する問題