encode
используется для перехода от unicode
к str
, а не к обратному, означает преобразование unicode
в bytes
(str
в Python 2.x):
# -*- coding: utf-8 -*-
s = u'aller â'
print(type(s))
print(type(s.encode('utf-8'))) # convert to str but using utf-8 codec
print(s + str(1)) # unicode + str == unicode
print(str(s)) # generate an exception because its using `ascii` codec by default
так что в вашем примере название продукта все готово utf-8
unicode
не нужно вообще его преобразовывать, просто конвертируйте не строковый объект, такой как Integers, Floats.
my_unicode_text = u' '.join(
(u'ID ',
str(order_line.product_id.id), # Integer
u' | [',
order_line.product_id.code,
u'] ',
order_line.product_id.name, # utf-8 uncide (database encoding)
u' | ',
str(order_line.product_uom_qty), # floats
u'<br/>'))
, но вместо использования соединения используйте строкуформатирование и преобразование значения вручную:
my_unicode_text = u'ID {order_line.product_id.id} | [{order_line.product_id.code}] ' \
u'{order_line.product_id.name} | {order_line.product_uom_qty}<br/>'.format(order_line=order_line)