Wie konvertiere ich Unicode in Unicode-Escaped Text

Ich \xe9\x87\x8b eine Datei mit einem Bündel von Unicode-Zeichen (zB \xe9\x87\x8b ). Ich möchte diese Zeichen in ihre \u91cb -Unicode-Form ( \u91cb ) in Python \u91cb . Ich habe ein paar ähnliche Fragen hier auf StackOverflow gefunden, darunter auch diese Bewertung von UTF-8 Literal Escape Sequenzen in einer Zeichenfolge in Python3 , die fast genau das, was ich will, aber ich kann nicht herausfinden, wie die Daten zu speichern.

Zum Beispiel: Eingabedatei:

\xe9\x87\x8b

Pythonschrift

 file = open("input.txt", "r") text = file.read() file.close() encoded = text.encode().decode('unicode-escape').encode('latin1').decode('utf-8') file = open("output.txt", "w") file.write(encoded) # fails with a unicode exception file.close() 

Ausgabedatei (das möchte ich):

\u91cb

  • Python os.walk Machen Sie es Unterstützung Unicode / UTF-8?
  • Decodierung, wenn es nicht Unicode ist
  • Verwenden von Unicode (hebräische Zeichen) mit regulärem Ausdruck
  • UnicodeEncodeError bei Verwendung der Kompilierungsfunktion
  • Kombinieren mehrerer bedingter Ausdrücke in einem Listenverständnis
  • Chcp 65001 codepage führt zu Programmbeendigung ohne Fehler
  • Python: unicode im Windows-Terminal, Kodierung verwendet?
  • Wie man einen Unicode csv in Python 2.7 schreibt
  • 3 Solutions collect form web for “Wie konvertiere ich Unicode in Unicode-Escaped Text”

    Sie müssen es erneut mit unicode-escape Encoding verschlüsseln.

     >>> br'\xe9\x87\x8b'.decode('unicode-escape').encode('latin1').decode('utf-8') '釋' >>> _.encode('unicode-escape') b'\\u91cb' 

    Code modifiziert (verwendet Binär-Modus, um unnötige Codierung / Decodierung zu reduzieren)

     with open("input.txt", "rb") as f: text = f.read().rstrip() # rstrip to remove trailing spaces decoded = text.decode('unicode-escape').encode('latin1').decode('utf-8') with open("output.txt", "wb") as f: f.write(decoded.encode('unicode-escape')) 

    http://asciinema.org/a/797ruy4u5gd1vsv8pplzlb6kq

    Es sieht so aus, als ob Ihre Eingabedatei UTF-8 codiert ist, also geben Sie UTF-8-Codierung an, wenn Sie die Datei öffnen (Python3 wird nach Ihrer Referenz angenommen):

     with open("input.txt", "r", encoding='utf8') as f: text = f.read() 

    text enthält den Inhalt der Datei als str (dh Unicode-String). Jetzt können Sie es in Unicode-Escaped-Formular direkt in eine Datei schreiben, indem Sie encoding='unicode-escape' :

     with open('output.txt', 'w', encoding='unicode-escape') as f: f.write(text) 

    Der Inhalt Ihrer Datei enthält nun Unicode-Escaped-Literale:

     $ cat output.txt \u91cb 

    \xe9\x87\x8b ist kein Unicode-Zeichen. Es sieht aus wie eine Darstellung eines Bytestringes, der Unicode-Zeichen darstellt, das mit der utf-8-Zeichencodierung codiert ist. \u91cb ist eine Darstellung von Zeichen im Python-Quellcode (oder im JSON-Format). Verwechseln Sie nicht die Textdarstellung und das Zeichen selbst:

     >>> b"\xe9\x87\x8b".decode('utf-8') u'\u91cb' # repr() >>> print(b"\xe9\x87\x8b".decode('utf-8'))釋>>> import unicodedata >>> unicodedata.name(b"\xe9\x87\x8b".decode('utf-8')) 'CJK UNIFIED IDEOGRAPH-91CB' 

    Um den aus einer Datei als utf-8 codierten Text zu lesen, geben Sie die Zeichencodierung explizit an:

     with open('input.txt', encoding='utf-8') as file: unicode_text = file.read() 

    Es ist genau das gleiche für das Speichern von Unicode-Text in eine Datei:

     with open('output.txt', 'w', encoding='utf-8') as file: file.write(unicode_text) 

    Wenn Sie den expliziten encoding weglassen encoding wird locale.getpreferredencoding(False) verwendet, der mojibake erzeugen kann, wenn er nicht mit der tatsächlichen Zeichencodierung übereinstimmt, die zum Speichern einer Datei verwendet wird.

    Wenn Ihre Eingabedatei buchstäblich \xe9 (4 Zeichen) enthält, dann sollten Sie beheben, was Software es erzeugt. Wenn Sie 'unicode-escape' ; etwas ist kaputt.

    Python ist die beste Programmiersprache der Welt.