Python的編碼問(wèn)題

Python3 最重要的一項(xiàng)改進(jìn)之一就是解決了 Python2 中字符串與字符編碼遺留下來(lái)的這個(gè)大坑尉剩。港真曲聂,就這一點(diǎn)歌焦,安利Python3入門(mén)吶

首先介紹一下什么是編碼

在人類社會(huì)布卡,不同國(guó)家有不同的標(biāo)準(zhǔn)語(yǔ)法吭服,簡(jiǎn)體漢語(yǔ)、繁體漢語(yǔ)尸变、美式英語(yǔ)义图、英式英語(yǔ)等.....

但是機(jī)器保存數(shù)據(jù)是以一種特殊的方式來(lái)保存,讀取的時(shí)候也是以同樣的方式來(lái)解讀召烂。

在Python3當(dāng)中碱工,默認(rèn)處理中文的方式叫UTF-8∽喾颍【對(duì)比看傷害:UTF-8支持中文怕篷,Python2默認(rèn)格式是ASCII,不支持中文】

同樣的一個(gè)中文詞語(yǔ)桶蛔,例如:"中國(guó)"匙头,經(jīng)過(guò)UFT-8方法轉(zhuǎn)存到硬盤(pán)中,比如保存成了"110"仔雷,再通過(guò)UFT-8方法讀取,也是顯示"中國(guó)";通過(guò)另一種方法轉(zhuǎn)存到硬盤(pán)中碟婆,"中國(guó)"則會(huì)保存成"101"电抚,然后通過(guò)UTF-8讀取,肯定不會(huì)顯示成"中國(guó)"竖共,也許就是一個(gè)亂七八糟的亂碼"燙燙燙燙燙燙燙燙燙"蝙叛;

雖然上面的110、119公给、燙燙燙是亂填的借帘,下面示例代碼中有具體值,總之一個(gè):想要顯示正常淌铐,讀取數(shù)據(jù)時(shí)格式肺然,必須和保存數(shù)據(jù)時(shí)一致

Python3的編碼介紹

閑扯幾句——Python2 字符串設(shè)計(jì)上的一些缺陷:

  • 使用ASCII 碼作為默認(rèn)編碼方式,對(duì)中文處理很不友好腿准。
  • 把字符串牽強(qiáng)地分為 unicode 和 str 兩種類型际起,誤導(dǎo)開(kāi)發(fā)者

以上提及的兩個(gè)問(wèn)題,Python3都很好的解決了

  • 首先吐葱,Python3 把系統(tǒng)默認(rèn)編碼設(shè)置為 UTF-8
  • 然后街望,文本字符和二進(jìn)制數(shù)據(jù)區(qū)分得更清晰,分別用 str 和 bytes 表示弟跑。

文本字符全部用 str 類型表示灾前,str 能表示 Unicode 字符集中所有字符,而二進(jìn)制字節(jié)數(shù)據(jù)用一種全新的數(shù)據(jù)類型孟辑,用 bytes 來(lái)表示哎甲。

具體示例

先定義str類型的字符串:

>>> one_str = "第一個(gè)字符串"
>>> one_str
'第一個(gè)字符串'
>>> type(one_str)
str

通過(guò)str字符串,拿到byte類型數(shù)據(jù)

>>> two_byte = one_str.encode()
>>> two_str
b'\xe7\xac\xac\xe4\xb8\x80\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
>>> type(two_str)
bytes

上面的one_str是字符串類型str扑浸,并通過(guò)編碼函數(shù)encode()烧给,得到二進(jìn)制類型參數(shù)two_byte。

既然通過(guò)字符串通過(guò)編碼得到了二進(jìn)制數(shù)據(jù)喝噪,那二進(jìn)制數(shù)據(jù)肯定可以通過(guò)解碼的形式得到字符串

>>> two_byte.decode()
'第一個(gè)字符串'
python3的字符串和二進(jìn)制數(shù)據(jù)

當(dāng)然础嫡,在做Python爬蟲(chóng)經(jīng)過(guò)會(huì)遇到類似'\u4e2d\u56fd'的Unicode編碼格式的數(shù)據(jù),導(dǎo)致顯示的不是中文

一般打印的都是str類型酝惧,這里提供個(gè)解析方法:

>>> decode_str = "\\u4e2d\\u56fd"
>>> decode_byte = decode_str.encode() #str只有編碼函數(shù)榴鼎,先編碼
>>> decode_byte #打印byte類型變量的數(shù)據(jù)
b'\\u4e2d\\u56fd'
>>> decode_byte.decode('unicode-escape') #decode解碼函數(shù),按照unicode的數(shù)據(jù)方法解碼
'中國(guó)'

在Python3版本當(dāng)中晚唇,str類型只有encode編碼函數(shù)巫财,已經(jīng)沒(méi)有的decode解碼函數(shù),所以先變成byte類型哩陕,再使用decode解碼函數(shù)平项。

上面的示例是str類型的字符串赫舒,如果"\\u4e2d\\u56fd"b"\\u4e2d\\u56fd"byte類型,則可以省去decode_byte = decode_str.encode()這句語(yǔ)句闽瓢,直接decode解碼就可以拿到正確漢字了

Python3的unicode和byte以及str

更多課程接癌,點(diǎn)擊這里Spbeen-Python3教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扣讼,隨后出現(xiàn)的幾起案子缺猛,更是在濱河造成了極大的恐慌,老刑警劉巖椭符,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荔燎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡销钝,警方通過(guò)查閱死者的電腦和手機(jī)有咨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)曙搬,“玉大人摔吏,你說(shuō)我怎么就攤上這事∽葑埃” “怎么了征讲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)橡娄。 經(jīng)常有香客問(wèn)我诗箍,道長(zhǎng),這世上最難降的妖魔是什么挽唉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任滤祖,我火速辦了婚禮,結(jié)果婚禮上瓶籽,老公的妹妹穿的比我還像新娘匠童。我一直安慰自己,他們只是感情好塑顺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布汤求。 她就那樣靜靜地躺著,像睡著了一般严拒。 火紅的嫁衣襯著肌膚如雪扬绪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天裤唠,我揣著相機(jī)與錄音挤牛,去河邊找鬼。 笑死种蘸,一個(gè)胖子當(dāng)著我的面吹牛墓赴,可吹牛的內(nèi)容都是我干的竞膳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竣蹦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顶猜!你這毒婦竟也來(lái)了沧奴?” 一聲冷哼從身側(cè)響起痘括,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滔吠,沒(méi)想到半個(gè)月后纲菌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疮绷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年翰舌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冬骚。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椅贱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出只冻,到底是詐尸還是另有隱情庇麦,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布喜德,位于F島的核電站山橄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舍悯。R本人自食惡果不足惜航棱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萌衬。 院中可真熱鬧饮醇,春花似錦、人聲如沸秕豫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馁蒂。三九已至呵晚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沫屡,已是汗流浹背饵隙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沮脖,地道東北人金矛。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓芯急,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驶俊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娶耍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 字節(jié)字符串和字符字符串字節(jié)字符串s是在console上看著是中文,但是正在輸出的確是字節(jié)字符串饼酿,而不是字符字符串榕酒。...
    大道至簡(jiǎn)_Andy閱讀 557評(píng)論 0 1
  • 字符集和編碼簡(jiǎn)介 在編程中常常可以見(jiàn)到各種字符集和編碼故俐,包括ASCII,MBCS,Unicode等字符集想鹰。確切的說(shuō)...
    蘭山小亭閱讀 8,487評(píng)論 0 13
  • 幾個(gè)基本概念 bit二進(jìn)制位, 是計(jì)算機(jī)內(nèi)部數(shù)據(jù)儲(chǔ)存的最小單位药版,11010100是一個(gè)8位二進(jìn)制數(shù)辑舷。一個(gè)二進(jìn)制位只...
    西電大俠閱讀 3,570評(píng)論 1 8
  • 問(wèn)題: 初學(xué)Python開(kāi)發(fā),今天拿簡(jiǎn)書(shū)小試了一下網(wǎng)絡(luò)爬蟲(chóng)強(qiáng)大的Requests庫(kù): import request...
    snowdenet閱讀 635評(píng)論 0 2
  • 人生難得槽片,在天寒地凍的日子何缓,一想起你就覺(jué)得溫暖。你哪里下雪了嗎还栓,喝杯酒聊聊貼心的話碌廓。
    徐克惜愚兄弟閱讀 176評(píng)論 0 0