[英]decode python binary string but not ensure ascii symbols
我有一个二进制对象:
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'\\\О\\\б\\\н\\\о\\\в\\\л\\\е\\\н\\\и\\\е'
为Обновление
?
像这样的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
范围内的\\xff
,则可以使用'latin1'编解码器。
data = '\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
out = data.encode('ascii').decode('unicode-escape')
只要所有转义符都有效(没有单个\\
),就应该可以使用。
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": "Обновление"}}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.