python %s 格式说明符对 utf-8 值失效
我有以下的Python代码,它是用来把数据推送到数据库的:
cursor.execute("INSERT INTO "+ DATA_TABLE + """ (fk_id, title, streetaddress,json)
values (%(fk_id)s, %(title)s, %(address)s, %(json)s ) """ ,(
result))
但是我遇到了一个错误:
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 185, in unicode_literal
return db.literal(u.encode(unicode_literal.charset))
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)
这个错误是因为%s期望的值是一个有效的latin-1字符串,而字典给它的是一个utf-8字符串吗?有没有什么简单的解决办法?
注意:这个json是通过json.dumps
安全地创建的。里面有很多不同语言的字符。
2 个回答
0
我觉得这个问题跟Python的%s格式化代码没关系。根据Python字符串格式化的文档,它可以顺利地格式化Unicode字符。不过,要注意的是,最终得到的字符串会是Unicode格式。
你有没有查看过相关的问题,比如如何让MySQL正确处理UTF-8?
4
你应该尝试把所有的字符串都转换成unicode格式。
cursor.execute(u"INSERT INTO "+ unicode(DATA_TABLE) + u""" (fk_id, title, streetaddress,json)
values (%(fk_id)s, %(title)s, %(address)s, %(json)s ) """ ,(
result))
然后在连接时使用charset="utf-8",具体可以参考这个链接:http://mysql-python.sourceforge.net/MySQLdb.html