簡體   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