Я пытаюсь напечатать строку юникода без конкретного гексагона кодировки. Я хватаю эти данные из facebook, который имеет тип кодирования в заголовках html UTF-8. Когда я печатаю тип - он говорит свой unicode, но затем, когда я пытаюсь декодировать его с помощью unicode-escape, возникает ошибка кодирования. Почему он пытается кодировать, когда я использую метод декодирования?Функция декодирования пытается закодировать Python
Код
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)
Это не повод для его ошибки. Он пытается декодировать объект unicode. Поскольку вы декодируете из двоичных данных в unicode данные, Python 2 сначала * закодирует * это, что он делает с ascii-кодеком. Это то, что терпит неудачу. –
@ Lennart Regebro: На самом деле я подозреваю, что фактическим типом его строки является 'str', а не' unicode'. Посмотрите, как он инициализирует строку - обратите внимание, что нет 'u'. Я думаю, что он имеет не строку юникода, а строку * unicode-escaped * (не то же самое!). Именно это он пытается декодировать в unicode. Если моя теория правильная, я думаю, что этот ответ на самом деле правильный. –
@Mark Byers: Правда, это непоследовательно, но пропустить u проще, чем печатать неверный тип. :) И ошибка согласуется с тем, что он делает. Если вы декодируете объект unicode, вы получаете ошибку кодирования. –