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