一個(gè)字符不等價(jià)于一個(gè)字節(jié),字符是人類能夠識(shí)別的符號(hào),而這些符號(hào)要保存到計(jì)算的存儲(chǔ)中就需要用計(jì)算機(jī)能夠識(shí)別的字節(jié)來(lái)表示。一個(gè)字符往往有多種表示方法,不同的表示方法會(huì)使用不同的字節(jié)數(shù)。這里所說(shuō)的不同的表示方法就是指字符編碼,比如字母A-Z都可以用ASCII碼表示(占用一個(gè)字節(jié)),也可以用UNICODE表示(占兩個(gè)字節(jié)),還可以用UTF-8表示(占用一個(gè)字節(jié))。字符編碼的作用就是將人類可識(shí)別的字符轉(zhuǎn)換為機(jī)器可識(shí)別的字節(jié)碼,以及反向過(guò)程。
UNICDOE才是真正的字符串,而用ASCII、UTF-8、GBK等字符編碼表示的是字節(jié)串。關(guān)于這點(diǎn),我們可以在Python的官方文檔中經(jīng)常可以看到這樣的描述"Unicode string" , " translating a Unicode string into a sequence of bytes"
我們寫(xiě)代碼是寫(xiě)在文件中的,而字符是以字節(jié)形式保存在文件中的,因此當(dāng)我們?cè)谖募卸x個(gè)字符串時(shí)被當(dāng)做字節(jié)串也是可以理解的。但是,我們需要的是字符串,而不是字節(jié)串。一個(gè)優(yōu)秀的編程語(yǔ)言,應(yīng)該嚴(yán)格區(qū)分兩者的關(guān)系并提供巧妙的完美的支持。JAVA語(yǔ)言就很好,以至于了解Python和PHP之前我從來(lái)沒(méi)有考慮過(guò)這些不應(yīng)該由程序員來(lái)處理的問(wèn)題。遺憾的是,很多編程語(yǔ)言試圖混淆“字符串”和“字節(jié)串”,他們把字節(jié)串當(dāng)做字符串來(lái)使用,PHP和Python2都屬于這種編程語(yǔ)言。最能說(shuō)明這個(gè)問(wèn)題的操作就是取一個(gè)包含中文字符的字符串的長(zhǎng)度:
- 對(duì)字符串取長(zhǎng)度,結(jié)果應(yīng)該是所有字符串的個(gè)數(shù),無(wú)論中文還是英文
- 對(duì)字符串對(duì)應(yīng)的字節(jié)串取長(zhǎng)度,就跟編碼(encode)過(guò)程使用的字符編碼有關(guān)了(比如:UTF-8編碼,一個(gè)中文字符需要用3個(gè)字節(jié)來(lái)表示;GBK編碼,一個(gè)中文字符需要2個(gè)字節(jié)來(lái)表示)
注意:Windows的cmd終端字符編碼默認(rèn)為GBK,因此在cmd輸入的中文字符需要用兩個(gè)字節(jié)表示
>>> # Python2
>>> a = 'Hello,中國(guó)' # 字節(jié)串,長(zhǎng)度為字節(jié)個(gè)數(shù) = len('Hello,')+len('中國(guó)') = 6+2*2 = 10
>>> b = u'Hello,中國(guó)' # 字符串,長(zhǎng)度為字符個(gè)數(shù) = len('Hello,')+len('中國(guó)') = 6+2 = 8
>>> c = unicode(a, 'gbk') # 其實(shí)b的定義方式是c定義方式的簡(jiǎn)寫(xiě),都是將一個(gè)GBK編碼的字節(jié)串解碼(decode)為一個(gè)Uniocde字符串
>>>
>>> print(type(a), len(a))
(, 10)
>>> print(type(b), len(b))
(, 8)
>>> print(type(c), len(c))
(, 8)
>>>
Python3中對(duì)字符串的支持做了很大的改動(dòng)。
-
編碼
+關(guān)注
關(guān)注
6文章
969瀏覽量
55784 -
字符
+關(guān)注
關(guān)注
0文章
237瀏覽量
25598 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86769
發(fā)布評(píng)論請(qǐng)先 登錄
探究python字節(jié)碼
python字符串拼接方式了解
字符流和字節(jié)流有什么那區(qū)別

Python轉(zhuǎn)義字符使用總結(jié)資料免費(fèi)下載

什么是復(fù)制字符串?Python如何復(fù)制字符串
Python字符的實(shí)例詳細(xì)說(shuō)明

Python字符數(shù)統(tǒng)計(jì)函數(shù)程序
2.2 python字符串類型
Python-字符串

python字符串有哪些特定方法
python字符串編寫(xiě)有哪些方法
Python2與Python3中對(duì)字符串的支持
Python字符編碼轉(zhuǎn)換

評(píng)論