当前位置: 首页 > 面试题库 >

UnicodeDecodeError:“ utf8”编解码器无法解码位置3-6中的字节:无效数据

单凯捷
2023-03-14
问题内容

unicode是如何在python2上工作的?我只是不明白。

在这里,我从服务器下载数据并解析为JSON。

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/eventlet-0.9.12-py2.6.egg/eventlet/hubs/poll.py", line 92, in wait
    readers.get(fileno, noop).cb(fileno)
  File "/usr/local/lib/python2.6/dist-packages/eventlet-0.9.12-py2.6.egg/eventlet/greenthread.py", line 202, in main
    result = function(*args, **kwargs)
  File "android_suggest.py", line 60, in fetch
    suggestions = suggest(chars)
  File "android_suggest.py", line 28, in suggest
    return [i['s'] for i in json.loads(opener.open('https://market.android.com/suggest/SuggRequest?json=1&query='+s+'&hl=de&gl=DE').read())]
  File "/usr/lib/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.6/json/decoder.py", line 336, in raw_decode
    obj, end = self._scanner.iterscan(s, **kw).next()
  File "/usr/lib/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib/python2.6/json/decoder.py", line 217, in JSONArray
    value, end = iterscan(s, idx=end, context=context).next()
  File "/usr/lib/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib/python2.6/json/decoder.py", line 183, in JSONObject
    value, end = iterscan(s, idx=end, context=context).next()
  File "/usr/lib/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib/python2.6/json/decoder.py", line 155, in JSONString
    return scanstring(match.string, match.end(), encoding, strict)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 3-6: invalid data

谢谢!!

编辑:以下字符串导致错误:'[{"t":"q","s":"abh\xf6ren"}]'\xf6应该解码为ö(abhören)


问题答案:

您尝试解析为JSON的字符串未使用UTF-8编码。它很可能是在ISO-8859-1中编码的。请尝试以下操作:

json.loads(unicode(opener.open(...), "ISO-8859-1"))

它将处理JSON消息中可能出现的所有变音符号。

您应该阅读Joel
Spolsky的《每个软件开发人员的绝对最低知识》,绝对肯定要了解Unicode和字符集(无借口!)。我希望它可以澄清您在Unicode方面遇到的一些问题。



 类似资料:
  • 问题内容: 我正在使用脚本,但在执行此操作时在服务器日志中发现了此错误, ``这里 函数返回。 张贴这个问题之前我已经提到这个 问题,操作系统,所以的。 更新 下一行损害了JSON编码器, 我有一个临时解决方案 但是我不确定这样做是否正确。 问题答案: 该错误是因为字典中存在一些非ASCII字符,并且无法对其进行编码/解码。避免此错误的一种简单方法是使用以下函数对此类字符串进行编码(如果字符串为非

  • 问题内容: 我有一个套接字服务器,应该从客户端接收UTF-8有效字符。 问题是某些客户端(主要是黑客)正在通过它发送所有错误的数据。 我可以轻松地区分真正的客户端,但是我会将所有发送的数据记录到文件中,以便以后进行分析。 有时我会得到这样的导致错误的字符。 我需要能够使带有或不带有这些字符的字符串UTF-8。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如: 我

  • 我有一个套接字服务器,它应该从客户端接收UTF-8有效字符。 问题是一些客户端(主要是黑客)正在通过它发送所有错误类型的数据。 我可以很容易地分辨出真正的客户机,但我会将发送的所有数据记录到文件中,以便以后进行分析。 有时我会遇到这样的字符,导致UnicodeDecodeError错误。 我需要能够使字符串UTF-8有或没有这些字符。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收

  • 问题内容: 我正在尝试使用python 2.7.12从json文件读取twitter数据。 我使用的代码是这样的: 结果我得到: 我仔细研究了类似问题的所有答案,并想出了这段代码,它在上一次有效。我不知道为什么现在不起作用…我将不胜感激! 问题答案: 这对您没有帮助,这会使事情进一步混乱- 这是一个讨厌的黑客,您需要将其从代码中删除。 错误正在发生,因为是一个字符串,您正在调用。仅当字符串是Uni

  • 我正在使用脚本,但在执行时在服务器日志中发现此错误, ​在这里 函数返回。 在发布此问题之前,我已将此问题提交给了SO。 下面这行代码伤害了JSON编码器, 我找到了一个临时的解决办法 但是我不确定这样做是否正确。

  • 问题内容: 我正在使用Python-2.6 CGI脚本,但是在执行服务器日志时发现此错误, 这里 函数返回。 张贴这个问题之前我已经提到这个问题,操作系统,所以的。 更新 下一行损害了JSON编码器, 我有一个临时解决方案 但是我不确定这样做是否正确。 问题答案: 该错误是因为字典中存在一些非ASCII字符,并且无法对其进行编码/解码。避免此错误的一种简单方法是使用encode()如下函数对此类字