繁体   English   中英

解码python二进制字符串,但不能确保ascii符号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM