使用 python 3 在 Windows 上使用 json.dumps 进行神秘字符串编码

N. *_*hle 1 python encoding json python-3.x

我们发现json.dumpsLinux 和 Windows 上的不同行为

\n\n
jsonData = json.load(open(\'test.json\'))\nprint(jsonData)\n\njsonStr = json.dumps(jsonData, ensure_ascii=False)\nprint(jsonStr)\n
Run Code Online (Sandbox Code Playgroud)\n\n

Linux 上的输出:(python3.3)

\n\n
{\'name\': \'M\xc3\xbcller\'}\n{"name": "M\xc3\xbcller"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Windows 上的输出:(python3.4)

\n\n
{\'name\': \'M\xc3\xbcller\'}\n{"name": "M\\xc3\\xbcller"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们错过了什么吗?test.json好像{\'name\': \'M\xc3\xbcller\'}

\n\n

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

\n

Mar*_*ers 5

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

jsonData = json.load(open('test.json', encoding='utf8'))
Run Code Online (Sandbox Code Playgroud)

open()功能文档来看:

默认编码取决于平台(无论locale.getpreferredencoding()返回什么)

强调我的。