2013-09-16 24 views
15

Mam problemy z kodowaniem znaków w utf-8. Używam Django i pojawia się ten błąd, gdy próbuję wysłać powiadomienie na Androida z tekstem innym niż zwykły. Próbowałem znaleźć źródło błędu i udało mi się dojść do wniosku, że źródła błędu nie ma w moim projekcie.UnicodeDecodeError: Kodek 'ascii' nie może dekodować bajtu 0xe7 w pozycji 0: porządkowy nie w zakresie (128)

w Pythonie skorupkach, wpisuję:

'ç'.encode('utf8') 

i dostaję ten błąd:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128) 

dostaję te same błędy z:

'á'.encode('utf-8') 
unicode('ç') 
'ç'.encode('utf-8','ignore') 

dostaję błędy z smart_text , force_text i smart_bytes też.

Czy to jest problem z Pythonem, moim systemem operacyjnym lub inną sprawą?

Używam Python 2.6.6 w wersji Red Hat 4.4.7-3

Odpowiedz

20

Próbujesz kodować/dekodować ciągi, a nie ciągi Unicode. Poniższe instrukcje działają:

u'ç'.encode('utf8') 
u'á'.encode('utf-8') 
unicode(u'ç') 
u'ç'.encode('utf-8','ignore') 
3

Korzystanie u'...', bez przedrostka u to ciąg bajtów nie ciąg Unicode .:

>>> u'ç'.encode('utf8') 
'\xc3\xa7'