Python中无需JSON解析直接解码二进制字符串为非ASCII Unicode
无需JSON解析转储,直接打印非ASCII字符串的方法
当然有更简便的方法!完全不用绕JSON解析转储那一圈,根据你的字节串类型,分两种常见场景处理:
场景1:字节串是目标文本的直接编码(比如UTF-8)
如果你的二进制对象是直接用UTF-8(或其他对应编码)编码的非ASCII文本(比如俄文“Обновление”的UTF-8字节),直接解码后打印就行:
# 这是"Обновление"的UTF-8编码字节串 byte_data = b'\xd0\x9e\xd0\xb1\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5' print(byte_data.decode('utf-8')) # 直接输出:Обновление
场景2:字节串包含Unicode转义序列(\uXXXX)
像你给出的b'\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435',其实是字节串里存了\u041e这类Unicode转义的ASCII字符。这种情况直接用unicode-escape解码就能把转义序列转换成真实的Unicode字符:
byte_data = b'\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435' print(byte_data.decode('unicode-escape')) # 输出:Обновление
如果是已经解码后的字符串(比如手里有个包含\uXXXX的普通字符串),也可以用类似逻辑处理:
str_with_escapes = "\\u041e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435" real_text = str_with_escapes.encode('ascii').decode('unicode-escape') print(real_text) # 输出:Обновление
针对你最初的JSON格式字节串
如果拿到的是类似b'{"node": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435"}}'的字节串,不想用JSON解析的话,直接用unicode-escape解码就能展开所有转义字符,保留JSON结构的同时显示非ASCII文本:
json_byte_data = b'{"node": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435"}}' print(json_byte_data.decode('unicode-escape')) # 输出:{"node": "Обновление"}}
内容的提问来源于stack exchange,提问作者kurtgn
相关产品推荐
相关产品推荐

