Ад Юникода в пирамиде: MySQL -> SQLAlchemy -> Пирамида -> JSON

Общие сведения

У меня настоящая неразбериха с Unicode и 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.

6
задан RustyFluff 22 August 2011 в 17:07
поделиться