Próbuję wydrukować ciąg znaków Unicode bez określonego kodu szykującego w nim. Chwytam te dane z Facebooka, który ma typ kodowania w nagłówkach html UTF-8. Kiedy wypisuję typ - mówi on o unicode, ale kiedy próbuję go zdekodować, uciekając unicode, mówi, że jest błąd kodowania. Dlaczego próbuje kodować, gdy używam metody dekodowania?Funkcja dekodowania próbuje kodować Python
Kod
a='really long string of unicode html text that i wont reprint'
print type(a)
>>> <type 'unicode'>
print a.decode('unicode-escape')
>>> Traceback (most recent call last):
File "scfbp.py", line 203, in myFunctionPage
print a.decode('unicode-escape')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 1945: ordinal not in range(128)
To nie jest powód jego błędu. Próbuje odszyfrować obiekt Unicode. Ponieważ dekodujesz dane binarne do danych unicode, Python 2 najpierw * zakoduje * to, co robi z kodem ASCII. To się nie udaje. –
@Lennart Regebro: Właściwie podejrzewam, że rzeczywisty typ jego łańcucha to 'str', a nie' unicode'. Zobacz, jak on inicjuje ciąg znaków - zauważ, że nie ma "u". Myślę, że to, co ma, nie jest łańcuchem unicode, ale łańcuchem * unikatowym * (nie tym samym!). To właśnie on próbuje rozszyfrować do unicode. Jeśli moja teoria jest właściwa, myślę, że ta odpowiedź jest prawdziwa. –
@Mark Byers: To prawda, to niespójne, ale brak u jest łatwiejsze niż wpisanie niewłaściwego typu. :) A błąd jest zgodny z tym, co robi. W przypadku dekodowania obiektu unicode pojawia się błąd kodowania. –