UnicodeEncodeError:'latin-1'编解码器不能编码字符该怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (458)

当我尝试向数据库中插入一个外部字符时,可能会导致此错误?

>>UnicodeEncodeError: 'latin-1' codec can't encode character u'\u201c' in position 0: ordinal not in range(256)

我该如何解决它?

提问于
用户回答回答于

字符U + 201C左双引号在Latin-1(ISO-8859-1)编码中不存在。

这是目前在代码页1252(西欧)。这是一个基于ISO-8859-1的Windows专用编码,但它将额外的字符放入0x80-0x9F范围内。代码页1252经常与ISO-8859-1混淆,如果您将页面作为ISO-8859-1提供服务,浏览器会将它们视为cp1252,但这是一种恼人的现在标准的Web浏览器行为。但是,它们确实是两种截然不同的编码:

>>> u'He said \u201CHello\u201D'.encode('iso-8859-1')
UnicodeEncodeError
>>> u'He said \u201CHello\u201D'.encode('cp1252')
'He said \x93Hello\x94'

如果你仅将数据库用作字节存储区,则可以使用cp1252对Windows西文代码页中存在的其他字符进行编码。但是其他Unicode字符在cp1252中不存在会导致错误。

用户回答回答于

我在使用Python MySQLdb模块时遇到了同样的问题。由于MySQL将允许你在文本字段中存储所需的任何二进制数据而不管字符集如何,因此我在此处找到了我的解决方案:

编辑:从上面的URL引用来满足第一条评论中的请求:

“UnicodeEncodeError:'latin-1'编解码器无法编码字符...” 这是因为MySQLdb通常会尝试将everythin编码为latin-1。这可以通过在建立连接后立即执行以下命令来解决:

db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')

“db”是结果MySQLdb.connect(),而“dbc”是结果 db.cursor()

扫码关注云+社区

领取腾讯云代金券