当我尝试在数据库中插入外来字符时,可能是什么导致此错误?
>>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(西欧)。这是Windows特定的编码,基于ISO-8859-1,但会将多余的字符放入0x80-0x9F范围内。代码页1252通常与ISO-8859-1混淆,这是一种令人烦恼但现在是标准的Web浏览器行为,如果您将页面作为ISO-8859-1提供服务,则浏览器会将它们视为cp1252。但是,它们实际上是两种不同的编码:
>>> u'He said \u201CHello\u201D'.encode('iso-8859-1') UnicodeEncodeError >>> u'He said \u201CHello\u201D'.encode('cp1252') 'He said \x93Hello\x94'
如果仅将数据库用作字节存储,则可以使用cp1252进行编码,“以及Windows Western代码页中的其他字符。但是cp1252中不存在的其他Unicode字符仍然会导致错误。
“
您可以encode(..., 'ignore')通过消除字符来抑制错误,但实际上在本世纪,您应该在数据库和页面中都使用UTF-8。此编码允许使用任何字符。理想情况下,您还应该告诉MySQL您正在使用UTF-8字符串(通过在字符串列上设置数据库连接和排序规则),这样它就可以正确区分大小写并进行排序。
encode(..., 'ignore')