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

解码python二进制字符串,但不确保使用ascii符号,python,unicode,Python,Unicode,我有一个二进制对象: 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

我有一个二进制对象:

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'
打印为

只要所有转义都有效(没有单个转义)

输出:

'{"node": "Обновление"}}'

只要所有转义都有效(没有单个转义)

输出:

'{"node": "Обновление"}}'

一个
字节
字符串

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)
输出

Обновление
但是,如果
数据
已经是Unicode字符串,则首先需要将其编码为字节。您可以使用
ascii
编解码器,假定
数据只包含ascii字符。如果它包含ASCII以外的字符,但在
\x80
\xff
的范围内,则可以使用“latin1”编解码器

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

一个
字节
字符串

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)
输出

Обновление
但是,如果
数据
已经是Unicode字符串,则首先需要将其编码为字节。您可以使用
ascii
编解码器,假定
数据只包含ascii字符。如果它包含ASCII以外的字符,但在
\x80
\xff
的范围内,则可以使用“latin1”编解码器

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

如果它不能像JSON那样被解析……那它是什么?它不是一个字符串,而是一个字节对象。@deceze不清楚他在问什么。他们想删除转义反斜杠来得到这个结果。他们说他们已经找到了一种方法来处理json字符串,但是他们希望在一般情况下使用一个方法。@FHT当然,但是这个例子看起来像json。JSON解析和AST文本解析都可以解决这个问题,是的。但如果担心在某些情况下它可能不是有效的JSON…那么,它会是什么呢?使用AST的有效Python?或者完全不同的东西?我想你可以做
data.decode('unicode-escape')
。但我会谨慎地建议,在不知道输入数据中可能存在哪些变化的情况下。如果它可能无法作为JSON进行分析……那么它是什么?它不是字符串,而是字节对象。@deceze不清楚他在问什么。他们想删除转义反斜杠以获得该结果。他们说他们已经找到了一种方法来处理json字符串,但是他们希望在一般情况下使用一个方法。@FHT当然,但是这个例子看起来像json。JSON解析和AST文本解析都可以解决这个问题,是的。但如果担心在某些情况下它可能不是有效的JSON…那么,它会是什么呢?使用AST的有效Python?或者完全不同的东西?我想你可以做
data.decode('unicode-escape')
。但在不知道输入数据中可能存在哪些变化的情况下,我会谨慎地建议这样做。