python json将set set编码为utf-8

use*_*593 10 python python-3.x

我有这个代码:

keys_file = open("keys.json")
keys = keys_file.read().encode('utf-8')
keys_json = json.loads(keys)
print(keys_json)
Run Code Online (Sandbox Code Playgroud)

keys.json中有一些非英文字符.但结果我得到:

[{'category': '???±?‚', 'keys': ['?‘?»?µ?????µ?? Philips',
'?????»???‚?????°?????° Polaris']}, {'category': '???‘??', 'keys':
['?…???»???? ???»???????? ?°?‚?»?°???‚', '?????????????????µ?‡???°??
???°?€?????° Bosch']}]
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

dec*_*eze 31

encode表示字符为二进制.读取文件时所需的内容二进制到字符decode.但实际上整个过程太过手动,只需这样做:

with open('keys.json', encoding='utf-8') as fh:
    data = json.load(fh)

print(data)
Run Code Online (Sandbox Code Playgroud)

with处理文件的正确打开和关闭,确保使用正确的编码读取文件的encoding参数open,并且load调用直接从文件句柄读取,而不是首先将文件内容的副本存储在内存中.

如果仍然输出无效字符,则表示您的源编码不是UTF-8,或者您的控制台/终端不处理UTF-8.

  • “文件句柄”。您可以选择任何其他名称。不过,它比“keys_file”更具描述性。还要注意,“`data`”比“keys_json”更合适;当您加载 JSON 数据时,它不再是 JSON,而是一个 Python 列表/字典。 (3认同)
  • 你将如何在 py2 中实现这一目标? (3认同)