【问题标题】:Mysterious string encoding with json.dumps on windows with python 3使用 python 3 在 Windows 上使用 json.dumps 进行神秘字符串编码
【发布时间】:2014-06-13 13:34:50
【问题描述】:

我们发现json.dumps 在 Linux 和 Windows 上的不同行为

jsonData = json.load(open('test.json'))
print(jsonData)

jsonStr = json.dumps(jsonData, ensure_ascii=False)
print(jsonStr)

Linux 上的输出:(python3.3)

{'name': 'Müller'}
{"name": "Müller"}

Windows 上的输出:(python3.4)

{'name': 'Müller'}
{"name": "M\xc3\xbcller"}

我们错过了什么吗? test.json 看起来像 {'name': 'Müller'}

如何在 Windows 上使用 Python 3 读取 UTF-8 文件?

【问题讨论】:

  • 您在 Windows 上使用什么编码写入文件?
  • 当然,我无法在 Mac 上的 Python 3.4 上重现您的问题;产生的输出看起来像 UTF-8 数据被解释为 Latin-1。您是否100% 确定 JSON 数据不是从文件中读取的?
  • 对不起,我试验了很多,放错了代码。
  • @Nicolas 我已将问题编辑为我理解您要问的内容。请确认。

标签: python json python-3.x encoding


【解决方案1】:

打开文件时不要依赖默认编码;您的 JSON 文件被编码为 UTF-8,但您使用单字节编解码器打开它(可能是 CP1252,Windows Latin-1 代码页):

jsonData = json.load(open('test.json', encoding='utf8'))

来自open() function documentation

默认编码是平台相关(无论locale.getpreferredencoding() 返回什么)

强调我的。

【讨论】:

  • 非常感谢!那是缺少的部分。
猜你喜欢
  • 2012-06-02
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多