最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3如何解決字符編碼問題詳解

 更新時(shí)間:2017年04月23日 08:44:41   作者:FOOFISH  
字符串是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個(gè)編碼問題。下面這篇文章主要給大家介紹了關(guān)于Python3如何解決字符編碼問題的相關(guān)資料,文中介紹的還是相對(duì)比較詳細(xì)的,需要的朋友可以參考借鑒,下面來一起看看吧。

編碼

因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以,一個(gè)字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295。

由于計(jì)算機(jī)是美國(guó)人發(fā)明的,因此,最早只有127個(gè)字母被編碼到計(jì)算機(jī)里,也就是大小寫英文字母、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

Python3字符編碼

Python3 最重要的一項(xiàng)改進(jìn)之一就是解決了 Python2 中字符串與字符編碼遺留下來的這個(gè)大坑。

Python2 字符串設(shè)計(jì)上的一些缺陷:

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

當(dāng)然這并不算 Bug,只要處理的時(shí)候多留心也可以避免這些坑。但在 Python3 兩個(gè)問題都很好的解決了。

首先,Python3 把系統(tǒng)默認(rèn)編碼設(shè)置為 UTF-8

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>

然后,文本字符和二進(jìn)制數(shù)據(jù)區(qū)分得更清晰,分別用 str 和 bytes 表示。文本字符全部用 str 類型表示,str 能表示 Unicode 字符集中所有字符,而二進(jìn)制字節(jié)數(shù)據(jù)用一種全新的數(shù)據(jù)類型,用 bytes 來表示。

str

>>> a = "a"
>>> a
'a'
>>> type(a)
<class 'str'>

>>> b = "禪"
>>> b
'禪'
>>> type(b)
<class 'str'>

bytes

Python3 中,在字符引號(hào)前加‘b',明確表示這是一個(gè) bytes 類型的對(duì)象,實(shí)際上它就是一組二進(jìn)制字節(jié)序列組成的數(shù)據(jù),bytes 類型可以是 ASCII范圍內(nèi)的字符和其它十六進(jìn)制形式的字符數(shù)據(jù),但不能用中文等非ASCII字符表示。

>>> c = b'a'
>>> c
b'a'
>>> type(c)
<class 'bytes'>

>>> d = b'\xe7\xa6\x85'
>>> d
b'\xe7\xa6\x85'
>>> type(d)
<class 'bytes'>
>>>

>>> e = b'禪'
 File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.

bytes 類型提供的操作和 str 一樣,支持分片、索引、基本數(shù)值運(yùn)算等操作。但是 str 與 bytes 類型的數(shù)據(jù)不能執(zhí)行 + 操作,盡管在py2中是可行的。

>>> b"a"+b"c"
b'ac'
>>> b"a"*2
b'aa'
>>> b"abcdef\xd6"[1:]
b'bcdef\xd6'
>>> b"abcdef\xd6"[-1]
214

>>> b"a" + "b"
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str

python2 與 python3 字節(jié)與字符的對(duì)應(yīng)關(guān)系

python2 python3 表現(xiàn) 轉(zhuǎn)換 作用
str bytes 字節(jié) encode 存儲(chǔ)
unicode str 字符 decode 顯示

encode 與 decode

str 與 bytes 之間的轉(zhuǎn)換可以用 encode 和從decode 方法。

encode 負(fù)責(zé)字符到字節(jié)的編碼轉(zhuǎn)換。默認(rèn)使用 UTF-8 編碼準(zhǔn)換。

>>> s = "Python之禪"
>>> s.encode()
b'Python\xe4\xb9\x8b\xe7\xa6\x85'
>>> s.encode("gbk")
b'Python\xd6\xae\xec\xf8'

decode 負(fù)責(zé)字節(jié)到字符的解碼轉(zhuǎn)換,通用使用 UTF-8 編碼格式進(jìn)行轉(zhuǎn)換。

>>> b'Python\xe4\xb9\x8b\xe7\xa6\x85'.decode()
'Python之禪'
>>> b'Python\xd6\xae\xec\xf8'.decode("gbk")
'Python之禪'

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • pyqt5 實(shí)現(xiàn) 下拉菜單 + 打開文件的示例代碼

    pyqt5 實(shí)現(xiàn) 下拉菜單 + 打開文件的示例代碼

    今天小編就為大家分享一篇pyqt5 實(shí)現(xiàn) 下拉菜單 + 打開文件的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化

    Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化

    這篇文章主要為大家詳細(xì)介紹了Python如何讀取CSV文件并進(jìn)行數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Anaconda第三方庫(kù)下載慢的解決方法

    Anaconda第三方庫(kù)下載慢的解決方法

    本文主要介紹了Anaconda第三方庫(kù)下載慢的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • pytorch 如何使用batch訓(xùn)練lstm網(wǎng)絡(luò)

    pytorch 如何使用batch訓(xùn)練lstm網(wǎng)絡(luò)

    這篇文章主要介紹了pytorch 如何使用batch訓(xùn)練lstm網(wǎng)絡(luò)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 舉例講解Python裝飾器

    舉例講解Python裝飾器

    這篇文章主要介紹了Python裝飾器的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Pycharm plot獨(dú)立窗口顯示的操作

    Pycharm plot獨(dú)立窗口顯示的操作

    這篇文章主要介紹了Pycharm plot獨(dú)立窗口顯示的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Python實(shí)現(xiàn)大文件排序的方法

    Python實(shí)現(xiàn)大文件排序的方法

    這篇文章主要介紹了Python大文件排序的方法,涉及Python針對(duì)文件、緩存及日期等操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python threading和multiprocessing模塊基本用法實(shí)例分析

    python threading和multiprocessing模塊基本用法實(shí)例分析

    這篇文章主要介紹了python threading和multiprocessing模塊基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python中threading和multiprocessing模塊基本概念、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • 對(duì)python中的iter()函數(shù)與next()函數(shù)詳解

    對(duì)python中的iter()函數(shù)與next()函數(shù)詳解

    今天小編就為大家分享一篇對(duì)python中的iter()函數(shù)與next()函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Pandas如何對(duì)帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中

    Pandas如何對(duì)帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中

    這篇文章主要介紹了Pandas如何對(duì)帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

深州市| 河北区| 龙陵县| 甘谷县| 吴堡县| 东乌珠穆沁旗| 富阳市| 新余市| 台东市| 凤凰县| 潞城市| 太谷县| 文水县| 淮北市| 巴塘县| 中西区| 迁安市| 苏尼特左旗| 会东县| 潮安县| 武隆县| 泗洪县| 蛟河市| 尖扎县| 尼木县| 读书| 沙洋县| 夏河县| 萍乡市| 马鞍山市| 肇源县| 白朗县| 额尔古纳市| 肇州县| 盐边县| 星座| 潮安县| 新乐市| 安福县| 沅江市| 师宗县|