2016-11-11 4 views
1

ich eine Zeichenfolge wie dieses:Konvertieren Sie ein String-Objekt mit Byte-Zeichen in ein Byte-Objekt?

text = 'b\'"Bill of the one\\xe2\\x80\\x99s store wanted to go outside.\'' 

Dies ergibt sich eindeutig jedoch formatiert sein Byte gemeint ist, wenn ich auf den Objekttyp aus, es gibt:

type(text) 
<class 'str'> 

I Codierung bei Byte versucht und dann decodiert, aber dies war das Ergebnis:

text.encode("utf-8").decode("utf-8") 
'b\'"Bill of the oneâ\x80\x99s store wanted to go outside.\'' 

Wie kann ich den Text richtig formatiert werden?

Antwort

2

Als weiteres mögliches Vorgehen unter Schnipsel, so scheint es mir, dass die Zeichenfolge, die Sie haben, ist das Ergebnis von repr auf einem Byte-Objekt aufrufen. Sie können einen Reverse repr von ast.literal_eval Aufruf:

>>> import ast 
>>> x = b'test string' 
>>> y = repr(x) 
>>> y 
"b'test string'" 
>>> ast.literal_eval(y) 
b'test string' 

Oder in Ihrem Fall:

>>> x = 'b\'"Bill of the one\\xe2\\x80\\x99s store wanted to go outside.\'' 
>>> import ast 
>>> ast.literal_eval(x) 
b'"Bill of the one\xe2\x80\x99s store wanted to go outside.' 
0

Warum tun Sie sowohl Codierung und Decodierung auf der String-Objekt, wenn Sie dies tun, werden Sie trotzdem in den gleichen Zustand kommen (d) string, kodieren nur, dass ausreichend ist.

text = 'b\'"Bill of the one\\xe2\\x80\\x99s store wanted to go outside.\'' 
type(text) #This will output <class 'str'> 

Nun, für Objekt-Byte nur Gebrauch machen von

byte_object=text.encode("utf-8") 
type(byte_object) #This will output <class 'bytes'> 
+0

Richtig, aber jetzt 'byte_object == b'b \ '" Bill des einer \\ XE2 \\ x80 \\ x99s Geschäft wollte nach draußen gehen. \ '' ' – brianpck

+0

ok, ich war nicht klar mit der Frage über @brianpck zu sehen Ich kann Ihre Anforderung verstehen, die Sie ast verwenden können, was dafür gedacht ist. –

Verwandte Themen