Dies scheint wie es eine einfache Lösung sein sollte, aber bis jetzt eine Lösung ist mir entgangen. Ich habe eine einzelne Spalte CSV-Datei mit Nicht-ASCII-Zeichen in utf-8 gespeichert, die ich einlesen und in einer Liste speichern möchte. Ich bin versucht, das Prinzip der "Unicode Sandwich" und Decodierung beim Lesen der Datei in folgen:Problem mit UTF-8 CSV-Eingabe in Python
import codecs
import csv
with codecs.open('utf8file.csv', 'rU', encoding='utf-8') as file:
input_file = csv.reader(file, delimiter=",", quotechar='|')
list = []
for row in input_file:
list.extend(row)
Dies erzeugt die Angst ‚Codec kodieren, kann nicht in Position Zeichen, Ordnungszahl nicht in Reichweite (128)‘ Fehler.
Ich habe auch versucht, eine Lösung aus this answer Anpassung, die eine ähnliche Fehler
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader:
yield [unicode(cell, 'utf-8') for cell in row]
filename = 'inputs\encode.csv'
reader = unicode_csv_reader(open(filename))
target_list = []
for field1 in reader:
target_list.extend(field1)
Eine sehr ähnliche Lösung aus den docs kehrt der gleiche Fehler angepasst zurückgibt.
def unicode_csv_reader(utf8_data, dialect=csv.excel):
csv_reader = csv.reader(utf_8_encoder(utf8_data), dialect)
for row in csv_reader:
yield [unicode(cell, 'utf-8') for cell in row]
def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')
filename = 'inputs\encode.csv'
reader = unicode_csv_reader(open(filename))
target_list = []
for field1 in reader:
target_list.extend(field1)
Offensichtlich vermisse ich etwas. Die meisten der Fragen, die ich bezüglich dieses Problems gesehen habe, scheinen Python 2.7 vorauszugehen, daher könnte ein Update hier nützlich sein.
Die Fehlermeldung deutet darauf hin, es könnte die Daten als ASCII zu entschlüsseln versuchen ... –
Ihr zweites Beispiel funktioniert für mich, vielleicht haben Sie gebrochen csv-Modul, schlage ich vor, Sie aktualisieren Ihr Python? Oder vielleicht ist der Fehler an anderer Stelle –
Es klingt wie Ihre ursprüngliche CSV-Datei nicht als UTF-8 kodiert ist - können Sie bestätigen, dass es ist? Vielleicht ist es UTF-16LE oder etwas oder eine andere sprachspezifische Codierung. Sie können das chardet-Modul verwenden, um die Codierung zu erkennen. – Ansari