2013-01-21 35 views
7

In Python 2.7, come si converte una stringa latin1 in UTF-8.Python che converte latin1 in UTF8

Ad esempio, sto cercando di convertire é in utf-8.

>>> "é" 
'\xe9' 
>>> u"é" 
u'\xe9' 
>>> u"é".encode('utf-8') 
'\xc3\xa9' 
>>> print u"é".encode('utf-8') 
é 

La lettera è é che è minuscola latina con accento acuto (U + 00E9) La codifica byte UTF-8 per è: c3a9
La codifica byte latino è: e9

Come fare Ottengo la versione codificata UTF-8 di una stringa latina? Qualcuno potrebbe dare un esempio di come convertire l'é?

+0

Hai già letto [Python Unicode HOWTO] (http://docs.python.org/2/howto/unicode.html)? Se no, dovresti! –

+0

@MartijnPieters Ho, ma la codifica è sempre un po 'confusa. – Eugene

risposta

6

Per decodificare una sequenza di byte da 1 a latino Unicode, utilizzare il .decode() method:

>>> '\xe9'.decode('latin1') 
u'\xe9' 

Python utilizza \xab fughe per Codepoints unicode sotto \u00ff.

>>> '\xe9'.decode('latin1') == u'\u00e9' 
True 

È possibile che questo carattere Latin-1 possono essere codificati in UTF-8 come:

>>> '\xe9'.decode('latin1').encode('utf8') 
'\xc3\xa9' 
2
>>> u"é".encode('utf-8') 
'\xc3\xa9' 

Hai un UTF-8 sequenza di byte codificato. Non provare a stampare direttamente i byte codificati. Per stamparli è necessario decodificare i byte codificati in una stringa Unicode.

>>> u"é".encode('utf-8').decode('utf-8') 
u'\xe9' 
>>> print u"é".encode('utf-8').decode('utf-8') 
é 

Si noti che la codifica e la decodifica sono operazioni opposte che annullano in modo efficace. Si finisce con la stringa originale u"é", anche se Python lo stampa come l'equivalente u'\xe9'.

>>> u"é" == u'\xe9' 
True 
0

concetto = concept.encode ('ascii', 'ignorare') = concetto MySQLdb.escape_string (concept.decode ('latin1'). Codificare ('utf8'). Rstrip())

Faccio questo, non sono sicuro che sia un buon approccio ma funziona sempre!

Problemi correlati