UnicodeEncodeError: 'latin-1'编解码器无法对位置637处的字符'\u2013'进行编码:序数不在256范围内。

3

这让我感到很疯狂,我尝试了社区中不同的建议,但似乎都没有用。我甚至尝试只使用utf-8重新创建数据库,但仍然出现错误。

基本上,我正在使用pymysql模块并写入数据库。

openconnect = pymysql.connect(host='xxxx',port=3306,user='xxx',passwd='xxx',db='xxxx')
opencursor = openconnect.cursor()

我的一个栏位有问题,我尝试了以下选项...

引起问题的栏位是主题,我尝试了以下方法:

subject = (df.Subject[i])

subject.encode('latin-1', 'ignore')

尝试向数据库写入失败,如果我尝试使用 subject.encode('latin-1') 也会失败。

我有两个选择,要么修复编码问题,要么如何在 pymysql 中设置字符集为 utf-8?我已验证 MySQL 数据库的字符集设置为 utf-8。非常感谢您对此的帮助。

仍在苦苦挣扎。


我刚刚尝试了那个.. 但仍然显示相同的错误。 - NKB
1
@MarlonAbeykoon:1- subject 不是一个字面上的字符串,所以编码声明例如 # -*- coding: utf-8 -*- 对它没有影响。该声明只能影响源代码中字符串字面值内的字符。2- 即使它确实受到影响,也不会有任何影响:'\u2013' 是一个仅包含 ASCII 字符的字符串字面值(Unicode 字符使用 Unicode 转义序列表示)。在 ASCII 范围内,Latin-1 和 UTF-8 没有区别。 - jfs
我猜这可能与mysql配置有关。你可能想把那个标签加到你的问题里。 - joel goldstick
好的,请停止。请提供一小段代码,以便我们可以重现您的问题(请参见[mcve])。然后将完整的堆栈跟踪与错误一起给我们。另外,为什么您要尝试进行“编码”? - Alastair McCormack
此外,标签中同时包含Py3k和py2.7。这是真的吗? - Alastair McCormack
显示剩余4条评论
1个回答

9

通过在pymysql连接中定义字符集,我成功解决了这个问题:

openconnect = pymysql.connect(
  host='xxxx',port=3306,user='xxx',passwd='xxx',db='xxxx',charset='utf8'
)

请注意,它是utf8而不是utf-8

1
不知道为什么会有负评。我遇到了同样的问题,使用charset='utf8'解决了。谢谢 :) - Kamil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接