python3 字符串轉16進制unicode碼


筆者在折騰USB轉GSM模塊發中文短信的時候,PDU模式需要把字符串轉成16進制unicode碼。

中文的好解決,encode unicode_escape編碼就可以了

# 需要把\\u去掉才能用於USB轉GSM模塊發中文短信
>>> '中'.encode('unicode_escape')
b'\\u4e2d'

但英文和數字就麻煩了,encode沒有變化

>>> 'a'.encode('unicode_escape')
b'a'

最終找到用ord把字符串轉成ascii/unicode數值, 然后用hex把數值轉成16進制unicode碼

# 16進制unicode碼長度大於4位的,需要去掉0x,等於4位的,需要把0x替換成00,才能用於USB轉GSM模塊發中文短信
>>> hex(ord('中'))
'0x4e2d' -> '4e2d'
>>> hex(ord('a'))
'0x61' -> '0061'
>>> hex(ord('2'))
'0x32' -> '0032'

完美

但還有一個問題就是讀取短信的時候讀到的也是16進制unicode碼,這就腦殼疼了,不過我找到一個偷懶的方法,每4位組成一個16進制unicode碼,前面加上\u,eval一下就轉成字符串了

>>> eval('\u0032')
2
>>> eval('\u0061')
'a'
>>> eval('\u4e2d')
'中'

完美

注意事項: 字符串轉16進制unicode碼時必須一個字符一個字符地處理,而16進制unicode碼轉字符串時是4個字符組成一個16進制unicode碼處理,不可混淆。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM