Фон
Я в полном беспорядке с юникодом и Python.Кажется, это общая проблема, и я пытался использовать другие решения, но я просто не могу разобраться с этим.
Настройка
Настройка базы данных MySQL
- collation_database: utf8_general_ci
- character_set_database: utf8
Модель SQLAlchemy
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.