【问题标题】:UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 637: ordinal not in range(256)UnicodeEncodeError:“latin-1”编解码器无法在位置 637 编码字符“\u2013”​​:序数不在范围内(256)
【发布时间】:2016-10-07 02:17:18
【问题描述】:

这让我发疯,我尝试了来自社区的不同建议,但似乎不起作用。我什至尝试仅使用 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。非常感谢您对此的意见..

仍在为此苦苦挣扎。 干杯 卡比尔

【问题讨论】:

  • 以某种方式形成问题主题 = (df.Subject[i]) 并在下一行 subject.encode('latin-1', 'ignore')
  • # -*- coding: utf-8 -*- 在脚本顶部添加这一行。
  • 我刚刚尝试过.. 仍然出现同样的错误
  • sql = sql.encode(self.encoding, 'surrogateescape') UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 637: ordinal not in range(256)
  • @MarlonAbeykoon: 1- subject 不是文字字符串,因此# -*- coding: utf-8 -*- 等编码声明对其没有影响。该声明可能仅影响源中字符串文字中的字符。 2-即使它确实影响了它;没关系:'\u2013' 是一个仅包含 ascii 字符的字符串文字(unicode 字符使用 unicode 转义序列表示)。 latin-1 和 utf-8 在 ascii 范围内没有区别。

标签: python python-3.x python-2.7 utf-8 iso-8859-1


【解决方案1】:

我能够通过在pymysql connect 中定义一个字符集来解决这个问题:

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

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

【讨论】:

  • 不知道为什么投反对票。我遇到了同样的问题,charset='utf8' 解决了它。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多