背景
我对unicode和Python的处理非常混乱。这似乎是一种常见的焦虑,我已经尝试过使用其他解决方案,但我就是无法摆脱它。
设置
MySQL数据库设置
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变量之前,我尝试过用各种类型进行编码和解码。
发布于 2011-08-21 19:37:59
以上评论是正确的,但更特殊的是,您可以用'label': prod.name.decode("cp1252")
代替'label': prod.name
。您可能还应该对json_prod字典中的所有字符串执行此操作,因为您可能会在实际应用程序的其他地方看到cp1252
编码字符。
在这一点上,根据这些字符串的来源以及在应用程序中使用该源的范围,您可能会在应用程序的其他地方遇到这样的问题,通常在您最不期望的情况下也会遇到这样的问题。为了进一步研究,您可能需要弄清楚这些字符串的源是什么,以及是否可以在较低的级别进行解码/重新编码,以纠正大多数未来的问题。
https://stackoverflow.com/questions/7139116
复制相似问题