Decodierung Unicode in Python

Ich habe eine Funktion, die einen String kodiert in Unicode \u05D4\u... als eine Variable str und ich möchte, dass Unicode in Briefe zu ändern, so dass diese str enthält die übersetzte Zeichenfolge.

Wie kann ich es tun?

4 Solutions collect form web for “Decodierung Unicode in Python”

Es gibt tatsächlich zwei Arten von Saiten, mit denen wir hier umgehen könnten.

Die erste ist eine Python-Unicode-Zeichenfolge , wobei die Zeichenfolge bereits ein Satz von Unicode-Punkten ist.

So sieht es in Python aus:

 >>> x = u"\u1129\u1129" >>> x u'\u1129\u1129' 

Sie können das einfach nur auf den Bildschirm drucken, da die Python-Druckfunktion in der Regel eine Codierung verwendet, die dies unterstützt. (Ich glaube es ist sys.stdout.encoding)

 >>> print x ᄩᄩ 

Wenn Sie dies codieren möchten, sollten Sie wahrscheinlich die utf-8-Codierung verwenden, die alle bekannten Unicode-Zeichen unterstützt. Allerdings brauchst du noch die Druckfunktion, um sie als lesbares Zeichen zu drucken.

Aber diese Art von String ist einfach zu drucken! Ich bezweifle, dass Sie irgendwelche Probleme haben würden, diese auf den Bildschirm auszugeben. Weshalb ich glaube, du hast die zweite Art von String:

Die zweite Art von String ist eine Unicode- Escaped -String , die in Sachen wie Java .properties-Dateien gefunden werden kann (wo sie dich zwingen, eine Einzelbyte-Variante der ascii-Codierung zu verwenden). So sieht es in Python aus:

 >>> escapedString = "\\u05D4\\u05D4\\u05D4" >>> print escapedString \u05D4\u05D4\u05D4 

Und dann, weil jeder, der diese Dateien entworfen hat, von Unicode und den grundlegenden Grundlagen der Charaktercodierung unwissend war, ist es unsere Aufgabe, diese entkommenen Codepunkte in lesbare Zeichen zu verwandeln.

 >>> pythonUnicode = escapedString.decode("unicode-escape") # This turns escaped unicode code points into Python unicode code points >>> print pythonUnicode ההה 

Und es sieht so aus, als hätten wir lesbare Charaktere!

Allerdings sollten Sie vorsichtig sein, wenn Sie Zeichen außerhalb der Basic Multilingual Plane (U + 0 bis U + FFFF) haben. Es gibt verschiedene Möglichkeiten, Zeichen zu codieren, die sich über die grundlegenden zwei Bytes hinaus erstrecken. Beispielsweise:

Python entkommt erweiterten Zeichen mit \U (Note Capital U) und einem Acht-Char.

 >>> print "\\U0001D11E".decode("unicode-escape") 𝄞 >>> print u"\U0001D11E" 𝄞 

Aber das rfc gibt eine andere Art der Flucht an:

Um einem erweiterten Zeichen zu entgehen, das sich nicht im Basic Multilingual Plane befindet, wird das Zeichen als zwölf Zeichenfolge dargestellt und kodiert das UTF-16-Surrogatpaar. So kann beispielsweise ein String, der nur das G-Notenzeichen (U + 1D11E) enthält, als "\ uD834 \ uDD1E" dargestellt werden.

So stellen Sie sicher, dass Sie wissen, woher Ihre Daten kommen!

Kodieren Sie die String als Unicode bei der Zuweisung und verwenden Sie den print um die mitgelieferten Zeichen korrekt aufzufordern:

 >>> s = u'\u05D4\u...' >>> print s ה 

Verwenden Sie u '..', um einen Unicode-String zu deklarieren und UTF-8 zu verwenden, um ihn zu codieren (UTF-8 ist eine Codierung mit variabler Breite, die jedes Zeichen im Unicode-Zeichensatz darstellen kann).

 #!/usr/bin/evn python a = u'\05D4\05D4' print a.encode(utf-8') >> xx 

Wenn du die Zeichenfolge in Unicode hast und du sie in darstellbare Zeichen übersetzen möchtest, musst du deine Codierung auswählen. Ich nehme an, dass du es auf deinem Terminal anzeigen möchtest und deine laufenden Fenster?

 ustr = u'\u05D5' print ustr.encode('latin-1') 

Jetzt ist hier etwas komisch Die Sequenz, die Sie in Ihrem Beispiel zitiert haben, klickt nicht auf irgendwelche rechtlichen Zeichen in der lateinischen 1-Kodierung, also empfehle ich Ihnen immer 'ersetzen' als Ihren Fehlerbehandler. Dh:

 print ustr.encode('latin-1', 'replace') 

HINWEIS:

Ich sehe, dass der Zeichensatz hebräisch sein soll

 print ustr.encode('hebrew', 'replace') # alias for iso8859_8 
  • Unicode Dateiname zu python subprocess.call () [duplicate]
  • Python und schrott Das kodierungsproblem
  • Wie können Sie Python 2.x warnen, wenn Sie Strings zu Unicode zwingen?
  • Python bekommt unicode aus devnagari Charakter
  • Erkennung von Nicht-Ascii-Zeichen in Unicode-String
  • Unicode-Zeichenfolge kann in Python 2.4 nicht decodiert werden
  • Umwandlung in Emoji
  • Python: Unicode in ASCII ohne Fehler umwandeln
  • UnicodeDecodeError: ungültiges Startbyte
  • Python urllib.request und utf8 decoding Frage
  • Python Character Encoding Europäische Akzente
  • Python ist die beste Programmiersprache der Welt.