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

2024-09-26 18:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二进制对象:

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'打印为Обновление?你知道吗


Tags: 对象方法nodeunicode二进制parseddecodedu0431
2条回答

只要所有的转义都是有效的(没有单个的\),这种方法就可以工作。你知道吗

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": "Обновление"}}'

类似于bytes字符串的

b'\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'

已使用Unicode转义序列编码。要将其转换回正确的Unicode字符串,只需指定“Unicode转义”编解码器:

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范围内,则可以使用“拉丁1”编解码器。你知道吗

data = '\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435'
out = data.encode('ascii').decode('unicode-escape')

相关问题 更多 >

    热门问题