python筆記6-%u60A0和\u60a0類似unicode解碼


前言

有時候從接口的返回值里面獲取到的是類似"%u4E0A%u6D77%u60A0%u60A0"這種格式的編碼,不是python里面的unicode編碼。

python里面的unicode編碼應該是這種格式:\u4e0a\u6d77\u60a0\u60a0

unicode編碼-python2

1.先看下python的unicode編碼:\u60a0,這個是\u開頭的,里面的英文是小寫

# coding:utf-8

# 前面加u可以直接打印中文
a = u"\u4e0a\u6d77\u60a0\u60a0"
print(a)

# 字符串需decode成默認unicode編碼
b = r"\u4e0a\u6d77\u60a0\u60a0"
print(b.decode("unicode_escape"))

2.如果在字符串前面加個u,意思是轉化成unicode編碼,如果獲取到的是應該字符串原型,那就需要decode解碼成unicode編碼,python里面默認的unicode編碼名稱是unicode_escape

替換%-python2

1.如果是這種帶%的編碼,先替換成,這樣就是unicode編碼了,雖然里面的英文字符是大小,還好這里不區分大小寫。

# coding:utf-8

c = "%u4E0A%u6D77%u60A0%u60A0"

# 解決辦法一:替換%
d = c.replace("%", "\\")
print(d.decode('unicode_escape'))

解決辦法二:unichr

1.先切割成單個字符,再用unichr轉換成中文,再連成字符串,這個有點復雜了

# coding:utf-8
def switch_to_ch(f):
    '''轉換成中文'''
    g = f.split("%u")[1:]
    h = [''+unichr(int(i, 16)) for i in g]
    return "".join(h)

if __name__ == "__main__":
    f = "%u4e0a%u6d77%u60a0%u60a0"
    ch = switch_to_ch(f)
    print(ch)

python3解碼

1.python3默認的編碼就是unicode,這個跟python2還不太一樣,如果直接給字符串decode會報錯:AttributeError: 'str' object has no attribute 'ecode'

2.python3先encode成utf-8編碼,再decode成默認的unicode就可以了

3.代碼參考

# coding:utf-8

c = "%u4E0A%u6D77%u60A0%u60A0"
# python3解決辦法:替換%
d = c.replace("%", "\\")
print(d.encode("utf-8").decode("unicode_escape"))

python自動化交流 QQ群:779429633


免責聲明!

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



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