2017-06-26 6 views
1

Ich habe folgende Python-Code:Warum wird Unicodecsv nicht richtig schreiben?

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']) 

Dies sollte eine CSV erstellen, die "こ ん に ち は 世界", sagt; stattdessen schreibt es Kauderwelsch. Die Überprüfung des Endprodukts mit einem Hex-Editor zeigt Ähnlichkeiten: EX YY ZZ wird in C3 AX C2 YY C2 ZZ umgewandelt, obwohl ich nicht weiß, wie.

Ich verwende Python 2.7.11 unter Windows 10 und sys.stdout.encoding sagt "cp437" in der Konsole.

+1

Nicht wirklich eine Antwort, aber wenn ich mit 'unicode' arbeite, ist es einfacher, ganze Projekte auf Python 3 zu portieren, als die verschiedenen komplizierten Wege (und die damit verbundenen zeitweiligen Fehler) beim Umgang mit Unicode in Python 2.7 zu entwirren . Wenn du kannst, ist es wahrscheinlich * way * wert, Python 3 zu benutzen. – Paul

+2

'\ xe3 \ x81 \ x93' sind die UTF-8-codierten Bytes von' こ '. Dies als Unicode-String zu behandeln und es erneut als UTF-8 * zu codieren ist falsch. Behandle es als Byte-String und verwende das Standard-'csv'-Modul oder verwende einen korrekten Unicode-String, wie @Sahan gezeigt hat. –

Antwort

3

Können Sie den Quellcode Codierung wie dies am Anfang der Quelldatei versuchen Einstellung:

# 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'こんにちは世界']) 

Weitere Lektüre auf:

# coding=utf-8 

Also, Ihre gesamte Lösung sollte wie folgt aussehen mit Unicode-Zeichenliteralen können Sie das Python Unicode HOWTO Dokument

überprüfen lassen Sie mich, wie es geht

Verwandte Themen