溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python3編碼怎樣實(shí)現(xiàn)相互轉(zhuǎn)化

發(fā)布時(shí)間:2020-11-16 09:31:48 來(lái)源:億速云 閱讀:166 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了Python3編碼怎樣實(shí)現(xiàn)相互轉(zhuǎn)化,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

可以通過(guò) Unicode 編碼來(lái)進(jìn)行不同編碼之間的相互轉(zhuǎn)化

  • 了解 ASCIIUnicode、UTF-8、GBK 這四種編碼的相關(guān)概念

  • 不同的編碼之間不能互相識(shí)別,不能相互轉(zhuǎn)化,會(huì)報(bào)錯(cuò)或出現(xiàn)亂碼 

  • 國(guó)際通用標(biāo)準(zhǔn):文字通過(guò)網(wǎng)絡(luò)傳輸、或硬盤(pán)存儲(chǔ)等不能使用 Unicode 編碼方式,因?yàn)?Unicode 使用的是升級(jí)版 32 位的,太費(fèi)流量和空間 

  • Python3 版本中,唯獨(dú) string 在內(nèi)存中的編碼方式是 Unicode,所以字符串不能直接進(jìn)行網(wǎng)絡(luò)傳輸及進(jìn)行文件的存儲(chǔ)

  • bytes:也是一種數(shù)據(jù)類(lèi)型,不是字節(jié),與 string 類(lèi)型就像是孿生兄弟

 

為啥要有 bytes ?—— bytes 內(nèi)部編碼不是 Unicode 方式,因此可以進(jìn)行網(wǎng)絡(luò)傳輸和文件的存儲(chǔ)

 前面提到,string 類(lèi)型卻是 Unicode 方式,為啥平時(shí)我們用的是 string 而不是 bytes?——因?yàn)?bytes 的中文是 16 進(jìn)制方式存在

因此,一般當(dāng)需要網(wǎng)絡(luò)傳輸數(shù)據(jù)或者文件存儲(chǔ)時(shí)要考慮用 bytes 類(lèi)型。

s1 = "abc"
s2 = b"abc"
 
print(type(s1))     # <class 'str'>
print(type(s2))     # <class 'bytes'>

string 轉(zhuǎn)化成 bytes 的方法

######## 方法一 ########
# Unicode編碼方式的 string --> GBK編碼方式的 string --> GBK編碼方式的 bytes
# encode    編碼
# decode    解碼
 
# Python3 版本中,字符串的編碼方式就是 Unicode, 所以這里等同于 s = u"中國(guó)"
s1 = "中國(guó)"
b = s1.encode("gbk")
s2 = b.decode("gbk")
 
print(s1)           # 中國(guó)
print(b)            # b'\xd6\xd0\xb9\xfa'
print(s2)           # 中國(guó)
print(type(s1))     # <class 'str'>
print(type(b))      # <class 'bytes'>
print(type(s2))     # <class 'str'>
 
# 原因解析:首先 s1 是以 Unicode 編碼方式的 string
# 然后 b 是將 Unicode 編碼方式的 string 轉(zhuǎn)化成 GBK 編碼方式的 bytes
# 最后 s2 是將 GBK 編碼方式的 bytes 轉(zhuǎn)化成 Unicode 編碼方式的 string
 
 
######## 方法二 ########
# Unicode編碼方式的 string --> UTF-8 編碼方式的 string --> GBK編碼方式的 bytes
 
s1 = "中國(guó)"
b = s1.encode("utf-8")
s2 = b.decode("utf-8")
 
print(s1)           # 中國(guó)
print(b)            # b'\xe4\xb8\xad\xe5\x9b\xbd'
print(s2)           # 中國(guó)
print(type(s1))     # <class 'str'>
print(type(b))      # <class 'bytes'>
print(type(s2))     # <class 'str'>

強(qiáng)調(diào)一點(diǎn):不同編碼之間只能通過(guò) Unicode 編碼方式來(lái)相互轉(zhuǎn)化

Python3編碼怎樣實(shí)現(xiàn)相互轉(zhuǎn)化

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python3編碼怎樣實(shí)現(xiàn)相互轉(zhuǎn)化內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI