2016-03-21 15 views
1

Ich habe eine Frage über Python 2-Codierung. Ich versuche, eine ASCII-Zeichenkette zu entschlüsseln, die Unicode-Code eines Buchstabens zu Unicode enthält, und es dann zurück zu Latin-1 zu kodieren, aber mit keinem Erfolg. Hier ist eine Abbildung:Konvertieren von ASCII in Unicode-Codierung Problem

In[27]: d = u'\u010d' 

In[28]: print d.encode('utf-8') 

č 

In[29]: d1 = '\u010d' 

In[30]: d1.decode('ascii').encode('utf-8') 

Out[30]: '\\u010d' 

Ich mag würde '\u010d'-'č' konvertieren. Gibt es integrierte Lösungen, um den Austausch von benutzerdefinierten Strings zu vermeiden?

+0

Erstens kann eine ASCII-Zeichenkette niemals Akzentzeichen wie è enthalten, da sie nicht Teil von ASCII sind. Python ist streng deswegen, es interpretiert ASCII nicht als "irgendetwas, das ein Byte pro Zeichen verwendet". Wenn Sie nun Pythons "Unicode" anstelle von "Str" verwenden, um Strings zu speichern, könnten Sie dieses Zeichen tatsächlich speichern und vielleicht auch in die byteweise Darstellung Latin-1 konvertieren. Ich würde vorschlagen, dass Sie auf Python 3 aktualisieren, da es für verschiedene Codierungen besser entwickelt ist. –

Antwort

1

Wenn Sie das tun

d1 = '\u010d' 

Sie diese Zeichenfolge tatsächlich erhalten:

In [3]: d1 
Out[3]: '\\u010d' 

Dies liegt daran, "normal" (Nicht-Unicode) Zeichenketten nicht erkennen die \unnnn Escape-Sequenz und damit umwandeln es zu einem wörtlichen Backslash, gefolgt von unnnn.

Um das zu entschlüsseln, müssen Sie die unicode_escape codec verwenden:

In [4]: print d1.decode("unicode_escape").encode('utf-8') 
č 

Aber natürlich sollten Sie nicht Unicode-Escape-Sequenzen in Nicht-Unicode-Strings in erster Linie verwenden.

+0

Danke, löste mein Problem! –

Verwandte Themen