我运行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)
我如何更正此错误,或者可能因异常而被捕获?有什么想法吗?
答案 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