日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python中bytes和str区别详细介绍

發(fā)布時(shí)間:2025/3/20 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中bytes和str区别详细介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python 3最重要的新特性之一是對字符串和二進(jìn)制數(shù)據(jù)流做了明確的區(qū)分。文本總是Unicode,由str類型表示,二進(jìn)制數(shù)據(jù)則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,你不能拼接字符串和字節(jié)流,也無法在字節(jié)流里搜索字符串(反之亦然),也不能將字符串傳入?yún)?shù)為字節(jié)流的函數(shù)(反之亦然)。

下面讓我們深入分析一下二者的區(qū)別和聯(lián)系。

編碼發(fā)展的歷史

在談bytes和str之前,需要先說說關(guān)于編碼是如何發(fā)展的。。

在計(jì)算機(jī)歷史的早期,美國為代表的英語系國家主導(dǎo)了整個(gè)計(jì)算機(jī)行業(yè),26個(gè)英文字母組成了多樣的英語單詞、語句、文章。因此,最早的字符編碼規(guī)范是ASCII碼,一種8位即1個(gè)字節(jié)的編碼規(guī)范,它可以涵蓋整個(gè)英語系的編碼需要。

編碼是什么?編碼就是把一個(gè)字符用一個(gè)二進(jìn)制來表示。我們都知道,所有的東西,不管是英文、中文還是符號等等,最終存儲在磁盤上都是01010101這類東西。在計(jì)算機(jī)內(nèi)部,讀取和存儲數(shù)據(jù)歸根結(jié)底,處理的都是0和1組成的比特流。問題來了,人類看不懂這些比特流,如何讓這些010101對人類變得可讀呢?于是出現(xiàn)了字符編碼,它是個(gè)翻譯機(jī),在計(jì)算機(jī)內(nèi)部某個(gè)地方,透明的幫我們將比特流翻譯成人類可以直接理解的文字。對于一般用戶,不需要知道這個(gè)過程是什么原理,是怎么執(zhí)行的。但是對于程序員卻是個(gè)必須搞清楚的問題。

以ASCII編碼為例,它規(guī)定1個(gè)字節(jié)8個(gè)比特位代表1個(gè)字符的編碼,也就是“00000000”這么寬,一個(gè)一個(gè)字節(jié)的解讀。例如:01000001表示大寫字母A,有時(shí)我們會“偷懶"的用65這個(gè)十進(jìn)制來表示A在ASCII中的編碼。8個(gè)比特位,可以沒有重復(fù)的最多表示2的8次方(255)個(gè)字符。

后來,計(jì)算機(jī)得到普及,中文、日文、韓文等等國家的文字需要在計(jì)算機(jī)內(nèi)表示,ASCII的255位遠(yuǎn)遠(yuǎn)不夠,于是標(biāo)準(zhǔn)組織制定出了叫做UNICODE的萬國碼,它規(guī)定任何一個(gè)字符(不管哪國的)至少以2個(gè)字節(jié)表示,可以更多。其中,英文字母就是用2個(gè)字節(jié),而漢字是3個(gè)字節(jié)。這個(gè)編碼雖然很好,滿足了所有人的要求,但是它不兼容ASCII,同時(shí)還占用較多的空間和內(nèi)存。因?yàn)?#xff0c;在計(jì)算機(jī)世界更多的字符是英文字母,明明可以1個(gè)字節(jié)就能夠表示,非要用2個(gè)。

于是UTF-8編碼應(yīng)運(yùn)而生,它規(guī)定英文字母系列用1個(gè)字節(jié)表示,漢字用3個(gè)字節(jié)表示等等。因此,它兼容ASCII,可以解碼早期的文檔。UTF-8很快就得到了廣泛的應(yīng)用。

在編碼的發(fā)展歷程中,我國還創(chuàng)造了自己的編碼方式,例如GBK,GB2312,BIG5。他們只局限于在國內(nèi)使用,不被國外認(rèn)可。在GBK編碼中,中文漢字占2個(gè)字節(jié)。

bytes和str之間的異同

回到bytes和str的身上。bytes是一種比特流,它的存在形式是01010001110這種。我們無論是在寫代碼,還是閱讀文章的過程中,肯定不會有人直接閱讀這種比特流,它必須有一個(gè)編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。因?yàn)榫幋a方式的不同,對這個(gè)比特流的解讀也會不同,對實(shí)際使用造成了很大的困擾。下面讓我們看看Python是如何處理這一系列編碼問題的:

>>> s = "中文" >>> s '中文' >>> type(s) <class 'str'> >>> b = bytes(s, encoding='utf-8') >>> b b'\xe4\xb8\xad\xe6\x96\x87' >>> type(b) <class 'bytes'>

從例子可以看出,s是個(gè)字符串類型。Python有個(gè)內(nèi)置函數(shù)bytes()可以將字符串str類型轉(zhuǎn)換成bytes類型,b實(shí)際上是一串01的組合,但為了在ide環(huán)境中讓我們相對直觀的觀察,它被表現(xiàn)成了b’\xe4\xb8\xad\xe6\x96\x87’這種形式,開頭的b表示這是一個(gè)bytes類型。\xe4是十六進(jìn)制的表示方式,它占用1個(gè)字節(jié)的長度,因此”中文“被編碼成utf-8后,我們可以數(shù)得出一共用了6個(gè)字節(jié),每個(gè)漢字占用3個(gè),這印證了上面的論述。在使用內(nèi)置函數(shù)bytes()的時(shí)候,必須明確encoding的參數(shù),不可省略。

我們都知道,字符串類str里有一個(gè)encode()方法,它是從字符串向比特流的編碼過程。而bytes類型恰好有個(gè)decode()方法,它是從比特流向字符串解碼的過程。除此之外,我們查看Python源碼會發(fā)現(xiàn)bytes和str擁有幾乎一模一樣的方法列表,最大的區(qū)別就是encode和decode。

從實(shí)質(zhì)上來說,字符串在磁盤上的保存形式也是01的組合,也需要編碼解碼。
如果,上面的闡述還不能讓你搞清楚兩者的區(qū)別,那么記住下面兩幾句話:

  • 在將字符串存入磁盤和從磁盤讀取字符串的過程中,Python自動地幫你完成了編碼和解碼的工作,你不需要關(guān)心它的過程。

  • 使用bytes類型,實(shí)質(zhì)上是告訴Python,不需要它幫你自動地完成編碼和解碼的工作,而是用戶自己手動進(jìn)行,并指定編碼格式。

  • Python已經(jīng)嚴(yán)格區(qū)分了bytes和str兩種數(shù)據(jù)類型,你不能在需要bytes類型參數(shù)的時(shí)候使用str參數(shù),反之亦然。這點(diǎn)在讀寫磁盤文件時(shí)容易碰到。

在bytes和str的互相轉(zhuǎn)換過程中,實(shí)際就是編碼解碼的過程,必須顯式地指定編碼格式。

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> b b'\xe4\xb8\xad\xe6\x96\x87' >>> type(b) <class 'bytes'> >>> s1 = str(b) >>> s1 "b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'" >>> type(s1) <class 'str'> >>> s1 = str(b, encoding='utf-8') >>> s1 '中文' >>> type(s1) <class 'str'>

我們再把字符串s1,轉(zhuǎn)換成gbk編碼的bytes類型:

>>> s1 '中文' >>> type(s1) <class 'str'> >>> b = bytes(s1, encoding='gbk') >>> b b'\xd6\xd0\xce\xc4'

總結(jié)

以上是生活随笔為你收集整理的Python中bytes和str区别详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av午夜在线观看 | 欧美在线观看不卡 | 黄色成年人 | 字幕网av | 成人自拍视频在线 | 国产激情视频一区二区 | 日韩大片一区二区 | 97免费在线观看视频 | 九九精品在线视频 | 色哟哟在线观看 | 国产精品h| 97超碰在线资源 | 国产成人a人亚洲精品无码 在线aa | 美女91网站 | 嫩草影院懂你的 | 欧美日韩在线视频免费观看 | 天天摸日日摸 | 成人综合一区二区 | 香蕉av一区 | 欧美激情在线免费观看 | 中文字幕在线免费看 | 一级大片免费观看 | 色哟哟网站在线观看 | 精品一区视频 | 国产又黄又猛视频 | 成人a级网站 | 成人激情片 | 国产欧美在线一区 | 456亚洲影院 | 久久久久无码国产精品一区 | 超碰在| 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 丁香婷婷久久久综合精品国产 | 蜜桃av噜噜一区二区三区麻豆 | 韩国黄色片网站 | 51国产偷自视频区视频 | 午夜国产一区二区三区 | 456亚洲影视 | 欧美一级大片在线观看 | 成人av电影在线播放 | 亚洲电影中文字幕 | 超碰在线影院 | 欧美精品久 | 18p在线观看 | 精品少妇白浆小泬60P | 一本色道久久综合狠狠躁 | 91片黄在线观 | 91高清视频 | 中文字幕无线码 | 久青草影院| 久久久久一区二区三区四区 | 亚洲国产欧美另类 | 91视频国产一区 | 白嫩日本少妇做爰 | 国产av国片偷人妻麻豆 | 亚洲精品国产精品国 | 激情综合站 | 蜜臀av性久久久久蜜臀av麻豆 | 日韩精品2 | 永久av免费在线观看 | 欧美最猛黑人xxxx | 夜色精品| 日韩av男人天堂 | 99久久精品免费视频 | 一区二区视频在线免费观看 | 亚洲国产欧美视频 | 色哟哟在线 | 精品亚洲综合 | 丝袜五月天| 姑娘第5集在线观看免费好剧 | 成人h视频在线观看 | 国产亚洲精品久久久久丝瓜 | 亚洲24p| 国产4区 | 国产激情免费视频 | 中文激情网| 亚洲欧洲精品一区 | 美女露胸软件 | 91禁在线看| 国产成人精品一区二区三区在线观看 | 日韩污视频在线观看 | 精品不卡一区二区三区 | 色呦呦麻豆 | 欧美中文字幕 | 亚洲中文字幕无码爆乳av | 天天干天天爱天天射 | 日韩欧美色图 | 国产做爰全过程免费视频 | 亚洲精品高清在线 | 亲嘴扒胸摸屁股激烈网站 | 久久五月网 | 欧美日本亚洲 | 99热在线免费观看 | 天天爱天天色 | 国产高清在线视频 | 人人爽人人做 | 国产成人午夜精华液 | 双性尿奴穿贞c带憋尿 | 麻豆专区 |