У меня настоящая неразбериха с Unicode и Python. Кажется, это обычное беспокойство, и я пробовал использовать другие решения, но я просто не могу понять это.
class Product(Base):
id = Column('product_id', Integer, primary_key=True)
name = Column('product_name', String(64)) #Tried using Unicode() but didn't help
@view_config(renderer='json', route_name='products_search')
def products_search(request):
json_products = []
term = "%%%s%%" % request.params['term']
products = dbsession.query(Product).filter(Product.name.like(term)).all()
for prod in products:
json_prod = {'id': prod.id, 'label': prod.name, 'value': prod.name, 'sku': prod.sku, 'price': str(prod.price[0].price)}
json_products.append(json_prod)
return json_products
Я получаю сообщения об ошибках кодирования из модуля json (который называется его средством визуализации для этого маршрута) следующим образом:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 37: invalid start byte
Причина - "-" (символ тире) в значении prod.name. Полная трассировка стека здесь . Если в возвращаемых продуктах нет знака «-», все работает нормально!
Я пробовал кодировать, декодировать с различными типами, прежде чем возвращать переменную json_products.