一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python3字符串encode與decode的講解

Python3字符串encode與decode的講解

2021-06-11 00:11西歐伯爵 Python

今天小編就為大家分享一篇關(guān)于Python3字符串encode與decode的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

大家好,很久沒(méi)更新了,也是年底了最近比較忙,同時(shí)也在研究python的其他內(nèi)容,畢竟是python小白,自學(xué)道路艱難。

好了今天和大家一起探討下python3編碼過(guò)程中對(duì)的一些轉(zhuǎn)碼事宜。

python3中對(duì)文本和二進(jìn)制做了比較清晰的區(qū)分。python3默認(rèn)編碼為unicode,由str類型進(jìn)行表示。二進(jìn)制數(shù)據(jù)使用byte類型表示,所以不會(huì)將str和byte混在一起。在實(shí)際應(yīng)用中我們經(jīng)常需要將兩者進(jìn)行互轉(zhuǎn)

有幾點(diǎn)需要注意:

1:字符串通過(guò)編碼轉(zhuǎn)換為字節(jié)碼,字節(jié)碼通過(guò)解碼轉(zhuǎn)換為字符串

str--->(encode)--->bytes,bytes--->(decode)--->str

?
1
2
3
4
5
6
import sys
print('目前系統(tǒng)的編碼為:',sys.getdefaultencoding())
name='小明'
print(type(name))#首先我們來(lái)打印下轉(zhuǎn)碼前的name類型,因?yàn)樗莝tr,所以可以通過(guò)encode來(lái)進(jìn)行編碼
name1=name.encode('utf-8')
print(name1)

輸出為:

目前系統(tǒng)的編碼為: utf-8
<class 'str'>
b'\xe5\xb0\x8f\xe6\x98\x8e'

這里大家或許會(huì)有一個(gè)疑問(wèn),編碼utf-8為什么不是decode轉(zhuǎn)成unicode

因?yàn)殚_頭跟大家講過(guò),python3默認(rèn)就是unicode,utf-8可以看成是unicode的一個(gè)擴(kuò)展集,所以其實(shí)name本身是一個(gè)unicode編碼的,所以可以通過(guò)encode編碼成utf-8,這里可以試下,如果認(rèn)為name應(yīng)該是utf-8,那我們來(lái)試下encode會(huì)不會(huì)報(bào)錯(cuò)

?
1
2
3
4
name1=name.decode('utf-8')
print(name1)
這里會(huì)報(bào)如下錯(cuò)誤:
AttributeError: 'str' object has no attribute 'decode'

所以,對(duì)于python3默認(rèn)的就是unicode編碼。

既然已經(jīng)encode成utf-8了,那我們來(lái)看下decode會(huì)出現(xiàn)什么樣的結(jié)果

?
1
2
3
4
5
6
7
name2=name1.decode('utf-8')
print(type(name2))
print(name2)
這里要跟大家說(shuō)下,decode()括號(hào)中為什么寫utf-8,而不寫gbk,可以這樣理解,因?yàn)橐獯a,你總得告訴它我是什么編碼的吧,比如我原先是utf-8格式的編碼,現(xiàn)在要解碼,但是如果冒充utf-8,說(shuō)自己是gbk,那就會(huì)出現(xiàn)亂碼,見下:
<class 'str'>
<class 'str'>
灝忔槑

另外如果大家encode()和decode()括號(hào)中不寫編碼格式,系統(tǒng)會(huì)默認(rèn)為utf-8,大家可以試下。

2:utf-8編碼格式和gbk編碼格式互轉(zhuǎn)

既然知道utf-8編碼與解碼的規(guī)律,那我們來(lái)試試它與gbk之間的火花。

?
1
2
3
4
5
6
7
8
9
10
11
12
name1=name.encode('utf-8')
name2=name1.decode('utf-8')
name3=name2.encode('gbk')
name4=name3.decode('gbk')
print(type(name3))
print(name3)
下面是name3的結(jié)果
<class 'bytes'>
b'\xd0\xa1\xc3\xf7'
下面是name4的結(jié)果
<class 'str'>
小明

從上面可以卡出name2本來(lái)是解碼成utf-8的,后來(lái)有隊(duì)name2進(jìn)行了gbk編碼,接著又再次對(duì)name3進(jìn)行g(shù)bk解碼

所以不難看出,其實(shí)utf-8和gbk之間都是通過(guò)unicode來(lái)做一個(gè)中間轉(zhuǎn)換的操作

在例子中

?
1
2
name2=name1.decode('utf-8')
name3=name2.encode('gbk')

這兩步的操作就是通過(guò)unicode來(lái)轉(zhuǎn)的

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

原文鏈接:https://blog.csdn.net/qq_29053519/article/details/79170519

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产麻豆精品入口在线观看 | 91探花在线播放 | 黄网国产 | 亚洲AV永久无码精品老司机蜜桃 | 国产亚洲精品自在线亚洲情侣 | 美女女女女女女bbbbbb毛片 | 热辣小秘书办公室 | 猥琐对着美女飞机喷到脸上 | 欧美日韩国产亚洲一区二区三区 | 免费波多野结衣庭教师 | 亚洲欧美久久久久久久久久爽网站 | 日本激情在线 | 亚洲精品午夜久久aaa级久久久 | 亚洲www在线 | 91成人免费视频 | 国产精品一区二区三区免费视频 | 99久久精品免费看国产四区 | 亚洲精品乱码久久久久久蜜桃图片 | 无码人妻视频又大又粗欧美 | 成人在线一区二区 | 蜜桃视频在线观看官网 | 大陆国产精品视频 | 亚洲高清国产拍精品动图 | 天天爽天天 | 久久综合狠狠综合狠狠 | 性绞姿始动作动态图 | 99久久精品免费看国产一区 | 小向美奈子av | 成功精品影院 | 免费欧美日韩 | 无码乱人伦一区二区亚洲一 | 欧美洲大黑香蕉在线视频 | 女性性色生活片免费观看 | 亚洲精品影视 | 久久精品午夜一区二区福利 | 暖暖 免费 高清 日本 在线1 | 精品无码久久久久久久久 | 大象传媒2021秘密入口 | 狠狠插入| 我把寡妇日出水好爽 | 日本视频在线免费看 |