2013-01-21 17 views
7

W Pythonie 2.7, jak przekonwertować ciąg łaciński1 do UTF-8.Python konwersja latin1 na UTF8

Na przykład próbuję przekonwertować é na utf-8.

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

List jest E, która jest Łacińska mała litera E z ostrą (U + 00E9) UTF-8 kodowanie bajt na to: c3a9
kodowanie bajt Łacińskiej: E9

Jak zrobić Otrzymuję zakodowaną w UTF-8 wersję łacińskiego ciągu znaków? Czy ktoś mógłby dać przykład, jak przekonwertować é?

+0

Czy znasz już [Python Unicode HOWTO] (http://docs.python.org/2/howto/unicode.html)? Jeśli nie, powinieneś! –

+0

@MartijnPieters Mam, ale kodowanie jest zawsze nieco mylące. – Eugene

Odpowiedz

6

celu dekodowania sekwencja bajtów od łacińskiego 1 do Unicode użyć .decode() method:

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

Python używa \xab ucieczki dla kody Unicode poniżej \u00ff.

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

Powyższy Latin-1 znak można zakodować na UTF-8, jak:

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

Masz kodowanie UTF-8 sekwencję bajtów. Nie próbuj bezpośrednio drukować zakodowanych bajtów. Aby je wydrukować, musisz odszyfrować zakodowane bajty z powrotem w ciąg Unicode.

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

Należy zauważyć, że kodowanie i dekodowanie są operacjami odwrotnymi, które skutecznie znoszą. W końcu otrzymujesz oryginalny ciąg znaków u"é", chociaż Python drukuje go jako odpowiednik u'\xe9'.

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

pojęcie = concept.encode ('ASCII', 'ignoruj') koncepcji = MySQLdb.escape_string (concept.decode ('latin1'). Kodowania ('utf8'). Rstrip())

Robię to, nie jestem pewien, czy to dobre podejście, ale działa za każdym razem !!