2016-06-20 7 views
-1

Ich habe Xml-Datei, die Hex-Zeichen \ x0a enthält. Ich möchte sie in richtige Unicode-Zeichen wie \ n in Python konvertieren.Python Lesen der Datei mit x0a als n nicht als \ x0a in Python

Immer, wenn ich versuche, die Dateien zu lesen, entkommt es den Backslash-Zeichen.

Zum Beispiel habe ich meine Dateiinhalte

get EtqLt5fwmRBE\x0a 

Dann sind nach der Dateien die Darstellung der Zeichenfolge Lesen kommt aus

get EtqLt5fwmRBE\\x0a 

sein, aber was ich will, ist \x0a-\n

zu konvertieren

Es gibt keine \x0a in Dateien. Es gibt auch andere Charaktere. Beispiele einer der repr() der Zeile in der Datei ist

\\x7c12\\x7c5\\x7c\\x0a 

Erwartete Ausgabe oben für

|12|5| 
+0

Geben Sie 'repr()' Ergebnisse aus? Das ist auch beim Drucken von Containern der Fall. '\\ x0a' ist eine literale' '' '' '' '' '' '' 'Folge von vier Zeichen. Ersetzen Sie einfach diese Sequenz mit '\ n'? –

+0

nein, wenn ich ohne repr ausgeben dann in den Inhalten sind 'Get EtqLt5fwmRBE \ x0a'. – user2823667

+0

Gibt es eine Möglichkeit, es zu konvertieren, um EtqLt5fwmRBE \ n zu erhalten? – user2823667

Antwort

6

Sie ist können Ihren Text durch die string_escape laufen (Python 2 nur, erzeugt ein bytestring) oder unicode_escape (Python 2 und 3, produziert einen Unicode-String) Codecs.

Wie Sie wenden diese auf Ihrer Python-Version hängt (2 oder 3) und wenn die Eingabe ein Byte-String (str in Python 2, bytes in Python 3) oder Unicode-Zeichenfolge (unicode in Python 2, str in Python 3).

Python 2, wenn Sie entweder ein Byte-String oder Unicode-String haben, rufen Sie einfach decode():

fixed = yourstring.decode('unicode_escape') 

In Python 3 bytestring.decode(...) verwenden, wenn Sie Bytes haben. Wenn Sie str kodieren zu latein 1 erste (als unicode_escape wird dass verwenden irgendwelche nicht ASCII Codepoints zu dekodieren!)

fixed = yourstring.encode('latin1').decode('unicode_escape') 

Demo in Python 2:

>>> '\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape') 
u'|12|5|\n' 
>>> u'\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape') 
u'|12|5|\n' 

In Python 3:

>>> b'\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape') 
'|12|5|\n' 
>>> '\\x7c12\\x7c5\\x7c\\x0a'.encode('latin1').decode('unicode_escape') 
'|12|5|\n'