我想在将UTF-8编码的字符串用作MySQL SELECT语句的一部分之前对其进行清理。
例如,我有:
query = MySQLdb.escape_string(query)
但是这一行导致了一个引发
的异常'ascii'编解码器无法编码位置0-2中的字符:序数不在 范围(128)。
我该如何处理?
答案 0 :(得分:3)
在您的示例中,query
的类型为'str'。如果在字符串前加上'u',它就会变成'unicode'类型。
>>> query = "こうえん"
>>> print type(query)
<type 'str'>
>>> query = u"こうえん"
>>> print type(query)
<type 'unicode'>
这是Python版本2.x和3.x之间的主要区别之一。从3.0开始,默认情况下所有字符串都是“unicode”。
答案 1 :(得分:3)
看起来MySQLdb正在尝试将您的unicode查询编码为字符串。为此,它使用默认编码:ASCII。
现在,您的输入无法编码为ASCII,因此您只需告诉python应使用的编码:utf-8。
您可以使用query = query.encode('utf-8').
答案 2 :(得分:0)
query = "こうえん"
query = MySQLdb.escape_string(unicode(query,'utf-8'))