2016-05-13 9 views
0

Ich habe Unicode-Zeichenfolgen (aus einer API-Abfrage), die als reguläre ASCII-Zeichenfolgen codiert sein sollten (da sie bereits Unicode-Darstellungen enthalten). Wie kann ich die Kodierung ändern, ohne tatsächlich die zu kodierenden Zeichen zu ändern?Python: unerwünschter Unicode-Typ

Nämlich:

string = '165\xc2\xba F' # What I want 
print(string) 

my_string = u'165\xc2\xba F' # What I have 
print(my_string) 

PS I \xc2\xba realisieren ist eigentlich für Ordnungszahl und nicht der Grad-Zeichen (\xc2\xb0), aber das ist, was ich bekam.

Antwort

2

Was Sie haben, ist nicht "Unicode" ist die Byte-Sequenz für die UTF-8-Codierung der Zeichenfolge, die Sie möchten.

Sie den Text abrufen, indem Sie den "Latin-1" Codec transparent Ihre Byte-Sequenz in eine Byte-Zeichenfolge (aus Ihrem Unicode-String) und sie zu transportieren, entschlüsseln sie normalerweise von UTF-8:

In[]: u'165\xc2\xba F'.encode("latin1").decode("utf-8") 
Out[]: u'165º F' 

Warum der Latin-1-Codec speziell ist und arbeitet in diesem Fall wird von hier auf dem zweiten Absatz: https://docs.python.org/3/library/codecs.html#encodings-and-unicode

Wenn Sie einige Minuten haben es zu ersparen wäre nützlich this nice article on Unicode zu lesen wissen Was sind Codecs und was bedeutet Text in Unicode?

+0

'u'165 \ xba F'' ist die Ausgabe, die ich für Ihre Eingabe erhalten habe. Nur wenn ich das drucke habe ich die gewünschte Ausgabe. Es ist alles sehr verwirrend. – bongbang

+0

Vielleicht verwende ich nicht den richtigen Ausdruck, aber das 'u' bezeichnet meine Zeichenfolge nicht unbedingt als "Unicode". Ich meine, das sagt 'type (my_string)'. – bongbang

+0

Dank Ihrer Antwort habe ich festgestellt, dass 'mein_String.encode ('latin1')' mir geben wird, was ich will. Sehr geschätzt! – bongbang

Verwandte Themen