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

  • Unicode in einer Liste drucken
  • Drucken Sie einen arabischen Unicode-String in Python (x, y)
  • Konvertieren von Unicode in Python
  • JSON wie String mit Unicode zum gültigen JSON
  • Unterschied zwischen u'string 'und unicode (string)
  • Python DictWriter schreibt UTF-8 codierte CSV-Dateien
  • Wie kann ich Unicode-Zeichen mit türkischen Zeichen in einer Textdatei mit Python ersetzen?
  • UnicodeEncodeError: 'ascii' codec kann das Zeichen u '\ xe7' nicht in Position 17710 codieren: ordinal nicht im Bereich (128)
  • 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.