Ваш звонок на unicode()
работает правильно. Именно конкатенация, которая добавляет объект Unicode к байтовой строке, вызывает проблемы. Если вы измените первую строку на u'''<tr><td>'''
, (или u'<tr><td>'
), она должна работать нормально.
Изменить: это означает, что ваша ошибка заключается в данных, которые уже находятся в html
к тому времени, когда питон достигает этого фрагмента:
>>> '\x9f<tr><td>' + unicode('\xc3\x60', 'big5')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 0: ordinal not in range(128)
>>> u'\x9f<tr><td>' + unicode('\xc3\x60', 'big5')
u'\x9f<tr><td>\u56a5'
>>>