Python ascii编码问题

时间:2014-01-25 18:44:22

标签: python encoding character-encoding

我运行python脚本并收到以下错误

sql = 'insert into posts(msg_id, msg_text, msg_date) values("{0}", "{1}", "{2}")'.format(msg['id'], text.encode('utf-8'), msg['datime'])
UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-31: ordinal not in range(128)

我如何更正此错误,或者可能因异常而被捕获?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试:

sql = u'insert into posts(msg_id, msg_text, msg_date) values("{0}", "{1}", "{2}")'.format(msg['id'], text.decode('utf-8'), msg['datime'])

基本上,您的text包含utf-8个字符,并使用encode()方法保持原样。但主要字符串(您正在格式化的字符串)是纯ASCII字符串。通过在字符串(u)前添加u'',可以使其成为unicode字符串。然后,无论文本是什么,您都希望将其解码为utf-8,因此.decode()代替.encode()

如果您想捕获这类错误,只需:

try:
    sql = …
except UnicodeEncodeError, err:
    print err

但是如果你想真正摆脱任何utf8 / ascii混乱,你应该考虑切换到python 3。

HTH