我有一个二元对象:
b'{"node": "\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435"}}'
我希望它以Unicode格式打印,而不是严格使用ASCII符号。
有一种愚蠢的方法:
decoded = string.decode()
parsed_to_dict = json.loads(decoded)
dumped = json.dumps(parsed_to_dict, ensure_ascii=False)
print(dumped)
>>> {"node": "Обновление"}
然而,文本并不总是可以解析为JSON,所以我需要一种更简单的方法。
有没有办法将我的二进制对象(或解码的Unicode字符串)打印为非ascii字符串而不通过解析/转储JSON?
例如,如何将此b'\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
打印为Обновление
?
答案 0 :(得分:2)
bytes
字符串,如
b'\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
已使用Unicode转义序列进行编码。要将其转换回正确的Unicode字符串,您只需指定'unicode-escape'编解码器:
data = b'\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
out = data.decode('unicode-escape')
print(out)
<强>输出强>
Обновление
但是,如果data
已经是Unicode字符串,那么首先需要将其编码为字节。您可以使用ascii
编解码器执行此操作,假设data
仅包含ASCII字符。如果它包含ASCII以外但在\x80
到\xff
范围内的字符,您可以使用'latin1'编解码器。
data = '\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
out = data.encode('ascii').decode('unicode-escape')
答案 1 :(得分:0)
只要所有转义都有效(没有单\
),这就应该有效。
import ast
bytes_object = b'{"node": "\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435"}}'
unicode_string = ast.literal_eval("'{}'".format(bytes_object.decode()))
输出:
'{"node": "Обновление"}}'