Python字符串格式化Unicode编码错误

0 投票
1 回答
2216 浏览
提问于 2025-04-16 19:35

我正在写一个Python脚本,这个脚本可以读取推文并把它们插入到MySQL数据库中。根据每条推文的不同属性,我需要插入不同的字段。因此,我在构建查询字符串的字段和值部分时,使用了Python的字符串格式化功能,这样比较方便:

values = """%s, %s, '%s','%s','%s','%s',%s,'%s','%s','%s'""" % (
                url_id, tweet['from_user_id'], conn.escape_string(tweet['location']),
                conn.escape_string(tweet['profile_image_url']),
                tweet['created_at'], tweet['from_user'], tweet['id'],
                conn.escape_string(tweet['text']),
                conn.escape_string(tweet['iso_language_code']), conn.escape_string(tweet['source'])
            )

不过,当我处理包含UTF8字符的推文时,会出现这样的错误:

values = """%s, %s, '%s','%s','%s','%s',%s,'%s','%s','%s'""" % (
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 117: ordinal not in range(128)

我觉得格式字符串(就是包含所有"%s"的那个)默认是以ASCII格式来解释的,这和UTF-8字符发生了冲突。我需要确保所有内容都保持在UTF-8格式,因为这段代码必须能处理任何可能的语言。

那么,我该怎么指定格式字符串是UTF-8呢?我原以为可以改变整个脚本的默认编码,但我使用的是Python 2.4版本,而在这个版本中没有sys.setdefaultencoding这个功能。现在,我不太确定该怎么做,或者这是否是正确的做法。

1 个回答

3

把这个:

"""%s, %s, '%s','%s','%s','%s',%s,'%s','%s','%s'"""

改成这个:

u"""%s, %s, '%s','%s','%s','%s',%s,'%s','%s','%s'"""

然后如果你想把它编码成UTF-8格式,可以这样做:

value.encode('utf8')

不过看起来你用的方法不太对,建议你看看这个链接:Python中如何为MySQL转义字符串

撰写回答