In einer Textdatei gibt es eine Zeichenfolge "Ich mag das nicht".
Wenn ich es jedoch in eine Zeichenfolge einlese, wird es zu "Ich mag \ xe2 \ x80 \ x98t nicht so". Ich verstehe, dass \ u2018 die Unicode-Darstellung von "'" ist. ich benutze
f1 = open (file1, "r")
text = f1.read()
Befehl zum Lesen.
Ist es nun möglich, die Zeichenfolge so zu lesen, dass beim Einlesen in die Zeichenfolge "Ich mag das nicht" anstelle von "Ich mag das nicht \ xe2 \ x80 \ x98t"?
Zweite Änderung: Ich habe gesehen, dass einige Leute Mapping verwenden, um dieses Problem zu lösen. Gibt es wirklich keine integrierte Konvertierung, die diese Art der Konvertierung von ANSI in Unicode (und umgekehrt) durchführt?
Antworten:
Ref: http://docs.python.org/howto/unicode
Das Lesen von Unicode aus einer Datei ist daher einfach:
Es ist auch möglich, Dateien im Aktualisierungsmodus zu öffnen, sodass sowohl gelesen als auch geschrieben werden kann:
EDIT : Ich gehe davon aus, dass Ihr beabsichtigtes Ziel nur darin besteht, die Datei in Python richtig in eine Zeichenfolge einlesen zu können. Wenn Sie versuchen, aus Unicode in eine ASCII-Zeichenfolge zu konvertieren, gibt es keine direkte Möglichkeit, dies zu tun, da die Unicode-Zeichen nicht unbedingt in ASCII vorhanden sind.
Wenn Sie versuchen, in eine ASCII-Zeichenfolge zu konvertieren, versuchen Sie eine der folgenden Möglichkeiten:
Ersetzen Sie die spezifischen Unicode-Zeichen durch ASCII-Entsprechungen, wenn Sie nur einige Sonderfälle wie dieses Beispiel behandeln möchten
Verwenden Sie die
unicodedata
Modulenormalize()
und diestring.encode()
Methode, um so gut wie möglich in das nächstgelegene ASCII-Äquivalent zu konvertieren (siehe https://web.archive.org/web/20090228203858/http://techxplorer.com/2006/07/18/converting- Unicode-to-ASCII-using-Python ):quelle
codecs
Das Modul behandelt den Universal Newlines-Modus nicht richtig. Verwenden Sieio.open()
stattdessen Python 2.7+ (es istopen()
in Python 3 integriert).Es sind einige Punkte zu beachten.
Ein \ u2018-Zeichen wird möglicherweise nur als Fragment der Darstellung einer Unicode-Zeichenfolge in Python angezeigt, z. B. wenn Sie Folgendes schreiben:
Wenn Sie die Unicode-Zeichenfolge einfach nur hübsch drucken möchten, verwenden Sie einfach die Unicode-
encode
Methode:Um sicherzustellen, dass jede Zeile aus einer Datei als Unicode gelesen wird, verwenden Sie besser die
codecs.open
Funktion anstelle von nuropen
, mit der Sie die Codierung der Datei angeben können:quelle
Aber es ist wirklich "Ich mag das nicht" und nicht "Ich mag das nicht". Das Zeichen u '\ u2018' ist ein völlig anderes Zeichen als "'" (und sollte visuell eher' '' entsprechen).
Wenn Sie versuchen, codierten Unicode in einfaches ASCII zu konvertieren, können Sie möglicherweise eine Zuordnung der Unicode-Interpunktion beibehalten, die Sie in ASCII übersetzen möchten.
Es gibt jedoch sehr viele Satzzeichen in Unicode , aber ich nehme an, Sie können sich darauf verlassen, dass nur einige von ihnen tatsächlich von der Anwendung verwendet werden, die die von Ihnen gelesenen Dokumente erstellt.
quelle
Es ist auch möglich, eine codierte Textdatei mit der Python 3-Lesemethode zu lesen:
Mit dieser Variante müssen keine zusätzlichen Bibliotheken importiert werden
quelle
Abgesehen von der Tatsache, dass Ihre Textdatei fehlerhaft ist (U + 2018 ist ein linkes Anführungszeichen, kein Apostroph): iconv kann verwendet werden, um Unicode-Zeichen in ASCII zu transliterieren.
Sie müssen nach "iconvcodec" googeln, da das Modul anscheinend nicht mehr unterstützt wird und ich keine kanonische Homepage dafür finden kann.
Alternativ können Sie das
iconv
Befehlszeilenprogramm verwenden, um Ihre Datei zu bereinigen:quelle
Es besteht die Möglichkeit, dass Sie eine Nicht-Unicode-Zeichenfolge mit Unicode-Escape-Zeichen haben, z.
Das ist mir schon einmal passiert. Sie können einen
unicode_escape
Codec verwenden, um die Zeichenfolge in Unicode zu dekodieren und sie dann in ein beliebiges Format zu kodieren:quelle
Auf diese Weise zeigt Pythons Ihnen Unicode-codierte Zeichenfolgen. Aber ich denke, Sie sollten in der Lage sein, die Zeichenfolge ohne Probleme auf dem Bildschirm zu drucken oder in eine neue Datei zu schreiben.
quelle
Tatsächlich ist U + 2018 die Unicode-Darstellung des Sonderzeichens. Wenn Sie möchten, können Sie Instanzen dieses Zeichens mit folgendem Code in U + 0027 konvertieren:
Womit schreiben Sie die Datei?
f1.read()
sollte eine Zeichenfolge zurückgeben, die folgendermaßen aussieht:Wenn diese Zeichenfolge zurückgegeben wird, wird die Datei falsch geschrieben:
quelle