读取包含转义 unicode 的 JSON 时的 Mojibake - 错误地解码为 Latin-1?
Mojibake when reading JSON containing escaped unicode - wrongly decoded as Latin-1?
我有一个 JSON 文件,其中包含 /u
个转义的 unicode 字符,但是当我在 Python 中阅读此文件时,转义字符似乎被错误地解码为 Latin-1 而不是UTF-8。在受影响的字符串上调用 .encode('latin-1').decode('utf-8')
似乎可以解决这个问题,但是 为什么会这样,有没有办法指定 json.load
转义序列应该被读取为 unicode 而不是拉丁文-1?
JSON 文件 message.json
,其中应包含由 "Grinning Face With Sweat" 表情符号组成的消息:
{
"message": "\u00f0\u009f\u0098\u0085"
}
Python:
>>> with open('message.json') as infile:
... msg_json = json.load(infile)
...
>>> msg_json
{'message': 'ð\x9f\x98\x85'}
>>> msg_json['message']
'ð\x9f\x98\x85'
>>> msg_json['message'].encode('latin-1').decode('utf-8')
''
在 open
或 json.load
中设置 encoding
参数似乎没有任何改变,因为 JSON 文件是纯 ASCII,并且 unicode 被转义在里面。
你所拥有的表情符号符号不正确;它真的意味着“ð”和三个未定义的代码点,所以你得到的翻译是正确的! (\u...
表示法与编码无关。)
JavaScript 中 unicode U+1F605 的正确表示法是 \ud83d\ude05
。在 JSON.
中使用它
{
"message": "\ud83d\ude05"
}
另一方面,如果您的问题是如何从错误的数据中获得正确的结果,那么是的,正如评论所说,您可能必须 运行 通过一些困难才能做到这一点。
我有一个 JSON 文件,其中包含 /u
个转义的 unicode 字符,但是当我在 Python 中阅读此文件时,转义字符似乎被错误地解码为 Latin-1 而不是UTF-8。在受影响的字符串上调用 .encode('latin-1').decode('utf-8')
似乎可以解决这个问题,但是 为什么会这样,有没有办法指定 json.load
转义序列应该被读取为 unicode 而不是拉丁文-1?
JSON 文件 message.json
,其中应包含由 "Grinning Face With Sweat" 表情符号组成的消息:
{
"message": "\u00f0\u009f\u0098\u0085"
}
Python:
>>> with open('message.json') as infile:
... msg_json = json.load(infile)
...
>>> msg_json
{'message': 'ð\x9f\x98\x85'}
>>> msg_json['message']
'ð\x9f\x98\x85'
>>> msg_json['message'].encode('latin-1').decode('utf-8')
''
在 open
或 json.load
中设置 encoding
参数似乎没有任何改变,因为 JSON 文件是纯 ASCII,并且 unicode 被转义在里面。
你所拥有的表情符号符号不正确;它真的意味着“ð”和三个未定义的代码点,所以你得到的翻译是正确的! (\u...
表示法与编码无关。)
JavaScript 中 unicode U+1F605 的正确表示法是 \ud83d\ude05
。在 JSON.
{
"message": "\ud83d\ude05"
}
另一方面,如果您的问题是如何从错误的数据中获得正确的结果,那么是的,正如评论所说,您可能必须 运行 通过一些困难才能做到这一点。