【问题标题】:UnicodeEncodeError: 'ascii' codec can't encode characters due to één from databaseUnicodeEncodeError:“ascii”编解码器无法编码字符,因为数据库中的 één
【发布时间】:2014-07-25 23:35:52
【问题描述】:

我有一个要从数据库中获取的字段,其中包含带有这部分 één 的字符串,并且在获取此内容时出现错误:

“UnicodeEncodeError: 'ascii' 编解码器无法对位置 12-15 中的字符进行编码:序数不在范围内 (128)”

我已经搜索过这个错误,其他人因为 unicodes 而遇到问题,这些 un​​icodes 以 u'\xa0 等开头。但在我的情况下,我认为这是由于特殊字符造成的。我不能对数据库进行更改,因为它不在我的访问范围内。我可以访问它。

代码在这里:(实际上是对外部url的调用)

req = urllib2.Request(url)
req.add_header("Content-type", "application/json")
res = urllib2.urlopen(req,timeout = 50)         #50 secs timeout
clientid = res.read()
result = json.loads(clientid)

然后我使用结果变量来获取上面提到的字符串,我在这一行得到错误:

updateString +="name='"+str(result['product_name'])+"', "

【问题讨论】:

  • 我已添加代码
  • 显示你“使用结果变量...并得到错误”的代码
  • 对数据库的调用在哪里,哪一行显示错误?
  • 当我尝试将它与我的更新查询连接时它在这里崩溃,即 updateString +="name='"+str(result['product_name'])+"', " 在这条线上给了我错误
  • 我没有数据库调用,我只是调用 API,它给了我 json 数据,我进一步使用它,但给了我上面评论中提到的错误

标签: python non-ascii-characters python-unicode non-unicode


【解决方案1】:

在将数据插入数据库之前,您需要找到用于数据的编码。我们假设它是 UTF-8,因为这是最常见的。

在这种情况下,您将需要 UTF-8 解码而不是 ascii 解码。你没有提供任何代码,所以我假设你有"data".decode()。试试"data".decode("utf-8"),如果你的数据是用这种编码方式编码的,就可以了。

【讨论】:

  • 我试过你上面提到的解决方案,这次它给出了一个不同的错误,即 s = obj['product_name'].decode("utf8") File "/usr/lib/python2.7/encodings /utf_8.py",第 16 行,解码返回 codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-15: ordinal not in range(128)
  • 所以它在 json.loads 上崩溃了?还是有别的地方?
  • 当我尝试将它与我的更新查询连接时它在这里崩溃,即 updateString +="name='"+str(result['product_name'])+"', " 在这条线上给了我错误
  • 那么你的编码可能不是utf-8。尝试找出使用的编码。
  • 我很抱歉现在出现“不支持解码 Unicode”错误。
【解决方案2】:

所以在我看来,当时的字符串已经是 unicode 了。所以删除该行上的str()unicode 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2013-04-11
    • 2015-10-21
    • 2010-12-11
    • 2012-07-02
    • 2010-12-11
    相关资源
    最近更新 更多