Wie konvertiert man eine Unicode-Zeichenfolge (die zusätzliche Zeichen wie £ $ usw. enthält) in eine Python-Zeichenfolge?
python
string
unicode
type-conversion
williamtroup
quelle
quelle
print type(unicode_string), repr(unicode_string)
Python 3.x:print type(unicode_string), ascii(unicode_string)
Bearbeiten Sie dann Ihre Frage und kopieren Sie die Ergebnisse der obigen Druckanweisung. Geben Sie die Ergebnisse NICHT erneut ein. Suchen Sie auch oben in Ihrem HTML-Code nach, ob Sie Folgendes finden können: <meta http-equiv = "Inhaltstyp" content = "text / html; charset = iso-8859unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
Antworten:
Sehen
unicodedata.normalize
quelle
unicode
Zeichenfolge in eine zu konvertieren ,str
besteht darin, die Zeichen, die in ASCII nicht dargestellt werden können, entweder zu löschen oder zu konvertieren. Also +1 von mir.type(title) == unicode and type(title.encode('utf-8')) == str
. Sie müssen die Eingabe nicht beschädigen, um einen Bytestring zu erhalten, der in einer Datei gespeichert werden kann.Sie können die Codierung in ASCII verwenden, wenn Sie die Nicht-ASCII-Zeichen nicht übersetzen müssen:
quelle
ignore
vsreplace
a.encode('ascii', 'xmlcharrefreplace')
gibt'aaaàçççñññ'
.type(a)
iststr
in Python 3.6.8 und hat keineencode()
Methode.Wenn die Zeichenfolge nur ASCII-Zeichen enthält.
quelle
Wenn Sie eine Unicode-Zeichenfolge haben und diese in eine Datei oder ein anderes serialisiertes Formular schreiben möchten, müssen Sie sie zuerst in eine bestimmte Darstellung codieren , die gespeichert werden kann. Es gibt mehrere gängige Unicode-Codierungen, z. B. UTF-16 (verwendet zwei Bytes für die meisten Unicode-Zeichen) oder UTF-8 (je nach Zeichen 1 bis 4 Bytes / Codepunkt) usw. Um diese Zeichenfolge in eine bestimmte Codierung zu konvertieren, müssen Sie Kann benutzen:
Diese rohe Folge von Bytes kann in eine Datei geschrieben werden. Beachten Sie jedoch, dass Sie beim Zurücklesen wissen müssen, in welcher Codierung es sich befindet, und es mit derselben Codierung decodieren müssen.
Wenn Sie in Dateien schreiben, können Sie diesen manuellen Codierungs- / Decodierungsprozess mithilfe des Codecs- Moduls entfernen . Verwenden Sie zum Öffnen einer Datei, die alle Unicode-Zeichenfolgen in UTF-8 codiert , Folgendes:
Beachten Sie, dass alle anderen Benutzer dieser Dateien verstehen müssen, in welcher Codierung sich die Datei befindet, wenn sie sie lesen möchten. Wenn Sie der einzige sind, der das Lesen / Schreiben ausführt, ist dies kein Problem. Andernfalls stellen Sie sicher, dass Sie in einer Form schreiben, die für alle anderen Benutzer der Dateien verständlich ist.
In Python 3 ist diese Form des Dateizugriffs die Standardeinstellung. Die integrierte
open
Funktion verwendet einen Codierungsparameter und übersetzt immer in / von Unicode-Zeichenfolgen (das Standardzeichenfolgenobjekt in Python 3) für Dateien, die im Textmodus geöffnet werden.quelle
Hier ist ein Beispiel:
quelle
utf8
wie hier gezeigt codiere, das Ergebnis nur Fragezeichen sind? Hier ist ein Bild von meinem Python, Version 2.7.13. (Ich kann andere Unicode-Objekte wie codierenu"Klüft"
, aber nicht die Euro?)Wenn Sie bereit / bereit sind, zu Python 3 zu wechseln (was möglicherweise nicht auf die Abwärtskompatibilität mit Python 2-Code zurückzuführen ist), müssen Sie keine Konvertierung durchführen. Der gesamte Text in Python 3 wird mit Unicode-Zeichenfolgen dargestellt. Dies bedeutet auch, dass die
u'<text>'
Syntax nicht mehr verwendet wird . Sie haben auch tatsächlich Byte-Zeichenfolgen, die zur Darstellung von Daten verwendet werden (die eine codierte Zeichenfolge sein können).http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Wenn Sie derzeit Python 3 verwenden, hängt das Problem wahrscheinlich damit zusammen, wie Sie versuchen, den Text in einer Datei zu speichern.)
quelle
Hier ist ein Beispielcode
quelle
Datei enthält Unicode-Zeichenfolge
für mich
quelle
result.encode().decode('unicode-escape')
Für meinen Fall, in dem ich eine Zeichenfolgenvariable mit Unicode-Zeichen hatte, funktionierte keine Antwort, und keine hier erläuterte Codierung-Decodierung erledigte die Arbeit.
Wenn ich in einem Terminal mache
oder
Die Ausgabe ist korrekt:
Die Arbeit mit Skripten, die diese Zeichenfolgenvariable laden, funktionierte jedoch nicht.
Dies ist, was bei meinem Fall funktioniert hat , falls jemand hilft:
quelle