【问题标题】:Unicode Error using JSON使用 JSON 的 Unicode 错误
【发布时间】:2012-02-06 12:56:17
【问题描述】:

我知道已经发布了类似的问题,但我认为我遇到的问题与他们相比略有不同。请多多包涵;我 4 个月前才开始使用 Python,我敢肯定我的不成熟表现出来了!

我正在编写一个程序,该程序使用树形图中的 Protovis 插件显示来自 CSV 文件的 LinkedIn 数据。据我所知,该插件设置正确,这一切都基于 O'Reilly 的 Mining the Social Web。但是,当我在 IDLE 中运行我的代码时,我收到以下错误消息:

Traceback (most recent call last):
 File "C:/Users/Envy 15/Desktop/MASIDendo", line 115, in <module>
    html = open(HTML_TEMPLATE).read() % (json.dumps(json_output),)
  File "C:\Python27\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python27\lib\json\encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python27\lib\json\encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 17: invalid start `byte`

现在据我了解,Unicode 错误的原因是我的一个文件名中有一个非 Unicode 字符,但是我检查了它们,但事实并非如此。它指向的我的代码部分是:

html = open(HTML_TEMPLATE).read() % (json.dumps(json_output),)
f = open(os.path.join(os.getcwd(), 'out', OUT), 'w')
f.write(html)
f.close()

print 'Data file written to: %s' % f.name

# Open up the web page in your browser

webbrowser.open('file://' + f.name)

对此的任何帮助将不胜感激!

【问题讨论】:

  • 您的 sn-p 的第一行试图做太多事情 - 创建 JSON,加载模板,并迭代值以创建最终的 HTML。将这些拆分为单独的步骤,您将更有可能看到发生了什么。

标签: python json unicode


【解决方案1】:

检查你的基础,验证 json_data 的内容,使用 repr() 或 pprint.pprint()。

str 和 unicode 对象具有接受错误参数的 encode 和 decode 方法,如下所示:"\x66\x89".decode("utf-8", "replace")

json.dumps把数据编码成json,奇怪的是你把json_output作为输入传入。

【讨论】:

  • 我接受您的智慧,先生 :)
  • @Dima Tisnek 然后,在知道哪些字符有问题之后,我们应该如何调试 JSON 文件?
【解决方案2】:

听起来您的json_output 对象中有一个不是 unicode 或 unicode-encodable 的字符串。不是文件名有问题。

【讨论】:

  • 非常感谢你们两个! qarma 的建议更好;我坚持打印 repr(json_output),它给了我数据中的所有非 unicode 字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多