python转二进制字符串_python如何将二进制串(UTF-8)转换为字符串?
已知一個二進制串(UTF-8編碼格式)列表(每一項為一字節8bit):
b=['01010000', '01111001', '01110100', '01101000', '01101111', '01101110', '11100101', '10100100', '10100111', '11100110', '10110011', '10010101']
#即字符串"Python大法"
如何將其轉換為字符串呢?
string = ""
for i in b:
string += chr(int(i,2))
print(string)
#這種方式對應純ASCII編碼的字符串是可以的
但UTF-8不可以,我們知道UTF-8是變長的,一個字符通常要占到3個甚至4個字節,上述代碼運行結果是:
'Python?¤§?3x95'
很明顯因為中文字符占到三個字節,自然每個字節chr()一次自然會亂碼。那又該如何處理變長的UTF-8編碼呢?
附:
UTF-8編碼方式:
1.對于單字節的符號,字節的第一位設為0,后面7位為這個符號的unicode碼。因此對于英語字母, UTF-8編碼和ASCII碼是相同的。
2.對于n字節的符號(n>1),第一個字節的前n位都設為1,第n+1位設為0,后面字節的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。
這里我想到一個處理多字節UTF-8的思路,大家看看是否可行:
(循環)當檢測到一項的前兩位是"11"時,用正則提出前面的所有1,即這個字符所占字節數,然后找到后面的字節,去掉10,然后將這幾個字節去掉前面的部分("1110"/"10")后剩下的合并,就是這個字符對應的Unicode編碼了,然后chr(int(i,2))。
那么請教大家,這樣的思路該如何實現?或者各路大神有什么簡便算法呢?抑或是有相關模塊可以做這樣的處理呢?(初入勿怪)
總結
以上是生活随笔為你收集整理的python转二进制字符串_python如何将二进制串(UTF-8)转换为字符串?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 系统类型_Java获取操作系统
- 下一篇: IDEA——Maven的配置与使用