清理UTF-8编码的字符串

时间:2011-12-24 15:54:02

标签: python mysql sanitization

我想在将UTF-8编码的字符串用作MySQL SELECT语句的一部分之前对其进行清理。

例如,我有:

query = MySQLdb.escape_string(query)

但是这一行导致了一个引发

的异常
  

'ascii'编解码器无法编码位置0-2中的字符:序数不在   范围(128)。

我该如何处理?

3 个答案:

答案 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'))