欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

老生常談Python基礎(chǔ)之字符編碼

 更新時(shí)間:2017年06月14日 08:55:53   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇老生常談Python基礎(chǔ)之字符編碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

字符編碼非常容易出問(wèn)題,我們要牢記幾句話:

1.用什么編碼保存的,就要用什么編碼打開

2.程序的執(zhí)行,是先將文件讀入內(nèi)存中

3.unicode是父編碼,只能encode解碼成其他編碼格式

utf-8,GBK這些是子8編碼,只能decode編碼成Unicode

一、什么是字符編碼

我們知道,計(jì)算機(jī)只能識(shí)別二進(jìn)制,我們平時(shí)寫的代碼都需要轉(zhuǎn)成二進(jìn)制才能被計(jì)算機(jī)識(shí)別。所以,我們寫的字符怎么轉(zhuǎn)換成二進(jìn)制呢,這個(gè)過(guò)程實(shí)際就是通過(guò)一個(gè)標(biāo)準(zhǔn)使我們寫的字符與特定數(shù)字一一對(duì)應(yīng),這個(gè)標(biāo)準(zhǔn)就稱為字符編碼。

字符------(字符編碼)------->數(shù)字

二、字符編碼發(fā)展歷程

1.ASCII碼

計(jì)算機(jī)起源于美國(guó),字符編碼也起源于美國(guó)。但是美國(guó)人民使用的文字只有26個(gè)字母,再加上些特殊符號(hào)就搞定了。不像我們中國(guó),小學(xué)生就要認(rèn)識(shí)幾千個(gè)漢字。所以美國(guó)人民就使用了ASCII碼(美國(guó)信息交換標(biāo)準(zhǔn)碼)作為字符編碼,一個(gè)Bytes代表一個(gè)字符,1Bytes=8bit,可以有2的8次方即256中不同的變化,但最初只用了前7位,即127個(gè)字符,已經(jīng)足夠美國(guó)人民使用了(當(dāng)然也出于成本的考慮)。后來(lái)將拉丁文編入第8位,至此,ASCII碼就被占滿了,英語(yǔ)國(guó)家和拉丁國(guó)家可以愉快的玩耍了。

2.GBK

別看咱們中國(guó)暫時(shí)科技比不上美帝國(guó),但是咱們有一顆積極向上的心啊,于是,在1980年,國(guó)家標(biāo)準(zhǔn)總局發(fā)布了中文使用的字符編碼-->GBK,使用兩個(gè)字節(jié)表示一個(gè)漢字,這樣就有2的16次方即65536種組合,已經(jīng)足夠漢字使用了。

同時(shí),其他國(guó)家也分別發(fā)布了自己國(guó)家的字符編碼標(biāo)準(zhǔn),如日本的shift_JIS,韓國(guó)的Euc-kr等等

3.Unicode

據(jù)說(shuō),字符編碼鼎盛時(shí)期有數(shù)百種,且彼此間互相不支持,看來(lái)各國(guó)人民都很有骨氣,但是這太不利于世界的互通了,于是Unicode應(yīng)運(yùn)而生。1994年,國(guó)際標(biāo)準(zhǔn)化組織發(fā)布了號(hào)稱萬(wàn)國(guó)碼的Unicode,用兩個(gè)字節(jié)表示一個(gè)字符,有65536種組合,已經(jīng)能把全世界絕大多數(shù)語(yǔ)言包括了。

4.utf-8

Unicode雖然好,但有一個(gè)問(wèn)題,本來(lái)用一個(gè)字節(jié)就能表示的英文,現(xiàn)在要用兩個(gè)字節(jié),存儲(chǔ)空間平白多出一倍,這顯然是不完美的,所以又產(chǎn)生了utf-8,對(duì)英文字符只用1個(gè)字節(jié),對(duì)中文字符用3個(gè)字節(jié)來(lái)表示?!?/span>

5.Unicode所有字符都是兩個(gè)字節(jié),簡(jiǎn)單粗暴,字符轉(zhuǎn)換成數(shù)字的速度快,但是占用存儲(chǔ)空間大

utf-8對(duì)不同的字符采用不用的長(zhǎng)度表示,節(jié)省空間,但是轉(zhuǎn)換效率不如Unicode快

內(nèi)存中使用的字符編碼是Unicode,內(nèi)存就是為了加快速度的,所以寧肯犧牲一點(diǎn)空間,也要保證速度

硬盤和網(wǎng)絡(luò)傳輸是用utf-8的,因?yàn)榇疟PI/O或者網(wǎng)絡(luò)I/O延遲要遠(yuǎn)大于utf-8的轉(zhuǎn)換效率,并且在網(wǎng)絡(luò)傳輸中應(yīng)該盡可能節(jié)省帶寬

三、Python解釋器執(zhí)行

第一階段:python解釋器啟動(dòng),此時(shí)就相當(dāng)于啟動(dòng)了一個(gè)文本編輯器

第二階段:python解釋器作為文本編輯器,去打開t.py文件,從硬盤上將t.py的文件內(nèi)容讀入到內(nèi)存中

第三階段:python解釋器解釋執(zhí)行剛剛加載到內(nèi)存中t.py的代碼

其中第二階段,t.py文件在保存時(shí)有一個(gè)字符編碼,在Python解釋器打開文件時(shí)也要指定一樣的編碼方式(Python2默認(rèn)的編碼方式是ASCII,Python3默認(rèn)是utf-8),如果文件保存的編碼格式和Python解釋器默認(rèn)的編碼方式不一樣,就要在文件的開頭寫上#coding: ,來(lái)告訴python解釋器不要用自己默認(rèn)的編碼方式來(lái)讀,而是要用頭文件指定的方式來(lái)讀文件,這樣才不會(huì)出錯(cuò)。

第三階段:讀取已經(jīng)加載到內(nèi)存中的代碼(默認(rèn)是Unicode),然后執(zhí)行,執(zhí)行過(guò)程中如果碰到類似定義變量的操作,就會(huì)在內(nèi)存中開辟一塊新的內(nèi)存空間。此時(shí)注意,新開辟的內(nèi)存空間不一定也是Unicode,用戶可以在定義變量的時(shí)候指定編碼方式,定義時(shí)開辟的內(nèi)存空間,也只是一塊空間而已,可以存放任意編碼格式的代碼。以Python3為例

四、編碼解碼

保存文件是把內(nèi)存中的文件保存到硬盤上

讀文件是把硬盤中的文件讀到內(nèi)存

Unicode是父編碼,utf-8,GBK這些是子編碼,如果子碼想轉(zhuǎn)換成其他編碼,必須要先轉(zhuǎn)換成父編碼,再由父編碼轉(zhuǎn)換成其他子編碼

解碼就是decode,是由子碼轉(zhuǎn)成父碼Unicode的過(guò)程

編碼就是encode,是由Unicode轉(zhuǎn)換成其他編碼的過(guò)程

之前說(shuō)過(guò),文件讀入內(nèi)存中,就成了Unicode編碼(當(dāng)然這是默認(rèn)情況,也可以根據(jù)指令更改),從硬盤讀文件的過(guò)程就是把硬盤中的utf-8解碼成Unicode

文件保存時(shí),就是由內(nèi)存保存到硬盤的過(guò)程,硬盤中是utf-8的編碼方式,需要由Unicode編碼成utf-8

五、Python2和Python3的區(qū)別

1.Python2的默認(rèn)編碼方式是ASCII,打開utf-8保存的文件時(shí)會(huì)報(bào)錯(cuò),應(yīng)該在頭文件上加#coding : utf-8

Python2中的str被識(shí)別為Bytes,所以Python2中的str是被編碼后的結(jié)果,其實(shí)會(huì)默認(rèn)做一件事,就是在str前面加一個(gè)u,先轉(zhuǎn)換成Unicode,在encode成bytes

Python2中有兩種字符串類型,str和Unicode,str可以通過(guò)在前面加個(gè)‘u'來(lái)轉(zhuǎn)換成Unicode

2.python 3 的默認(rèn)編碼方式是utf-8,可以直接打開用utf-8保存的文件

Python3中的str被識(shí)別成Unicode

Python3中也有兩種字符串類型(bytes和str),但bytes就是bytes,str是unicode

六、打印到終端

首先要知道,Windows的終端的默認(rèn)編碼方式是GBK

終端也是應(yīng)用程序,是運(yùn)行在內(nèi)存中的,所以我們用print()打印的過(guò)程,是從內(nèi)存中到內(nèi)存中。所以對(duì)于unicode,怎么打印都不會(huì)出錯(cuò),但是Python2中除了加‘u'的字符串外,其他的字符串是Bytes,此時(shí)終端中是GBK編碼,而Python2中是指定的utf-8或者默認(rèn)的ascii碼時(shí),在終端中打印就會(huì)出錯(cuò)。

這些是我目前的理解,如果我以后意識(shí)到錯(cuò)誤或者有表述不清的地方,再來(lái)修改。唉,字符編碼是個(gè)坑啊

以上這篇老生常談Python基礎(chǔ)之字符編碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于scrapy的redis安裝和配置方法

    基于scrapy的redis安裝和配置方法

    今天小編就為大家分享一篇基于scrapy的redis安裝和配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python正規(guī)則表達(dá)式學(xué)習(xí)指南

    Python正規(guī)則表達(dá)式學(xué)習(xí)指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友一起學(xué)習(xí)吧
    2016-08-08
  • 對(duì)django中foreignkey的簡(jiǎn)單使用詳解

    對(duì)django中foreignkey的簡(jiǎn)單使用詳解

    今天小編就為大家分享一篇對(duì)django中foreignkey的簡(jiǎn)單使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 如何在mac版pycharm選擇python版本

    如何在mac版pycharm選擇python版本

    這篇文章主要介紹了如何在mac版pycharm選擇python版本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python中的import絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入詳解

    python中的import絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入詳解

    這篇文章主要介紹了python中的import絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入詳解,在使用python做一些簡(jiǎn)單項(xiàng)目時(shí),import一般不會(huì)出現(xiàn)問(wèn)題,但項(xiàng)目結(jié)構(gòu)復(fù)雜時(shí),import可能發(fā)生報(bào)錯(cuò),需要的朋友可以參考下
    2023-11-11
  • python實(shí)現(xiàn)將視頻按幀讀取到自定義目錄

    python實(shí)現(xiàn)將視頻按幀讀取到自定義目錄

    今天小編就為大家分享一篇python實(shí)現(xiàn)將視頻按幀讀取到自定義目錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 人工智能最火編程語(yǔ)言 Python大戰(zhàn)Java!

    人工智能最火編程語(yǔ)言 Python大戰(zhàn)Java!

    開發(fā)者到底應(yīng)該學(xué)習(xí)哪種編程語(yǔ)言才能獲得機(jī)器學(xué)習(xí)或數(shù)據(jù)科學(xué)這類工作呢?這是一個(gè)非常重要的問(wèn)題。本文為大家提供作者的答案并解釋原因
    2017-11-11
  • python利用cv2庫(kù)讀取和保存視頻的操作步驟

    python利用cv2庫(kù)讀取和保存視頻的操作步驟

    這篇文章主要介紹了python利用cv2庫(kù)讀取和保存視頻的操作步驟,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • python3中布局背景顏色代碼分析

    python3中布局背景顏色代碼分析

    在本篇文章里小編給大家分享了一篇關(guān)于python3中布局背景顏色代碼分析的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • 用django設(shè)置session過(guò)期時(shí)間的方法解析

    用django設(shè)置session過(guò)期時(shí)間的方法解析

    這篇文章主要介紹了用django設(shè)置session過(guò)期時(shí)間的方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論