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

python與字符編碼問題

 更新時(shí)間:2019年05月24日 09:23:00   作者:謝木森  
這篇文章主要介紹了python與字符編碼問題,下面對編碼問題做個(gè)簡單的總結(jié),感興趣的朋友跟隨小編一起看看吧

用python2的小伙伴肯定會遇到字符編碼的問題。下面對編碼問題做個(gè)簡單的總結(jié),希望對各位有些幫助。

故事零:編碼的定義

我們從“SOS“(國際通用求助信號)開始,它的摩斯密碼的編碼是:

“…---…”,想一下為什么選用S、O、S來作為求救信號?因?yàn)樗唵危菀妆鎰e且不容易發(fā)錯(cuò)呀!
那么,字符編碼就是:

´給定一系列字符,對每個(gè)字符賦予一個(gè)數(shù)值,用數(shù)值來代表對應(yīng)的字符,這一數(shù)值就是字符的編碼。例如,我們給字符'A'賦予數(shù)值0x41,則0x41就是字符'A'的編碼。字符編碼是字符的表現(xiàn)、儲存方式。

字符編碼需要處理兩件事:

(1)規(guī)定一個(gè)字符集中的字符由多少個(gè)字節(jié)表示;

(2)制定該字符集的字符編碼表,即該字符集中每個(gè)字符對應(yīng)的(二進(jìn)制)值。

字符集:´給定一系列字符并賦予對應(yīng)的編碼后,所有這些字符和編碼對組成的集合就是字符集。´比如,給定字符列表為{'A','B'}時(shí),{'A'=>0x41,‘B'=>0x42}就是一個(gè)字符集。

常見字符集有:

ASCII
GB2312
GBK
GB18030
Big5
Unicode

一張圖總結(jié):

故事一:Python2與Python3的字符串類型?

python2中的字符串有str和unicode類型,而python3中字符串只有unicode類型。比如 ‘你好'是str字符串,而 u'你好'則是unicode字符串。

故事二:decode()和encode()傻傻分不清?

decode() 是將str字符串轉(zhuǎn)化為unicode字符串;encode() 是將unicode字符串轉(zhuǎn)化為str字符串。所以要做一些編碼的轉(zhuǎn)換通常是以unicode作為中間編碼做轉(zhuǎn)換。如name.decode(“GB2312”)表示將GB2312編碼的字符串name轉(zhuǎn)換成unicode編碼,name.encode(“GB2312”)表示將unicode字符串name轉(zhuǎn)換成GB2312編碼。

故事三:UnicodeEncodeError: ‘a(chǎn)scii' codec can't encode character?

我們先看看兩張圖,是不是很煩?

下面我們看個(gè)例子:

當(dāng)用u'字符串'申明這個(gè)字符串變量時(shí)就指明了該字符串是使用unicode字符編碼。當(dāng)要將unicode字符串轉(zhuǎn)換為str字符串或者寫入文件時(shí),python2默認(rèn)使用ASCII 碼保存數(shù)據(jù),而ASCII 碼無法識別大于128 的字符,于是報(bào)了上面的錯(cuò)誤。
附ASCII碼表:

故事四:unicode是什么?

unicode可以看做一個(gè)終極的字符編碼方法,它給出了地球上常用字符的二進(jìn)制映射,而且所有的二進(jìn)制字符串唯一地表示一個(gè)字符。但是,unicode只給出了字符和二進(jìn)制串的對應(yīng)關(guān)系,并沒有給出存儲形式。而不同字符所占用的存儲空間可能不同,比如ASCII 在unicode中只占用了一個(gè)字節(jié)即可,而常用漢字在unicode中需要占用兩個(gè)字節(jié),還有一些羅馬字符可能需要三個(gè)或以上字節(jié)。如果直接存儲的話可能導(dǎo)致無法分割字符串,也無法正確解碼出字符。

故事五:UTF-8橫空出世?

互聯(lián)網(wǎng)的普及,強(qiáng)烈要求出現(xiàn)一種統(tǒng)一的編碼方式。這時(shí)候UTF-8 出場。UTF-8 是unicode在計(jì)算機(jī)中的一種實(shí)現(xiàn)方式。UTF-8是一種變長編碼,每個(gè)字符占1-4 個(gè)字節(jié)。UTF-8 將字節(jié)分為數(shù)值位和標(biāo)識位,數(shù)值位真正保存字符編碼數(shù)值,標(biāo)識位表示這個(gè)字節(jié)是屬于哪個(gè)字符的、或者該字符占多少個(gè)字節(jié)。UTF-8 編碼方法:

單字節(jié),首位為標(biāo)識位0;多字節(jié)字符首字節(jié)標(biāo)志位1··10開頭,字符占多少字節(jié)則有多少1,其他字節(jié)標(biāo)識位10開頭;

§  單字節(jié)字符: 0xxxxxxx (以0 開頭標(biāo)志位,數(shù)值位用x 表示)

§  雙字節(jié)字符: 110xxxxx 10xxxxxx

§  三字節(jié)字符: 1110xxxx 10xxxxxx 10xxxxxx

§  四字節(jié)字符: 11110xxx 10xxxxxx 10xxxxxx10xxxxxx

unicode變?yōu)閁TF-8 編碼非常簡單,unicode二進(jìn)制按照從低到高,填充UTF-8的數(shù)值位,除去那些不真正表示數(shù)值的標(biāo)識位(字節(jié)開頭的0,10,110,1110和11110),順序也是由低到高。以漢字“你”為例,可見它的unicode編碼為“4f60”(01001111 01100000)。

從“你”的unicode值范圍可以看到需要三個(gè)字節(jié),接著從低位字節(jié)向高位字節(jié)填充得到“你”的UTF-8 編碼(高位沒有填充完則用0補(bǔ)充)。

可以看到將UTF-8 用于標(biāo)記位(紅色)的位去掉,合并可以得到原始的unicode碼。

故事六:"unicode-escape"與"unicode-unescape"

“\u”是表示unicode的轉(zhuǎn)義字符,用\uxxxx這種方式表示unicode字符就是”unicode-escape”方式。說人話:´一句話:xxx.decode(“unicode-escape”)相當(dāng)于把xxx解碼成unicode類型并返回。
而用”%uxxxx”的方式表示unicode字符,這種方式就是”unicode-unescape”,常用于javascript。

番外故事七:讀了那么多年書,你真的了解“全半角”?

全角---指一個(gè)字符占用兩個(gè)標(biāo)準(zhǔn)字符位置。
半角---指一字符占用一個(gè)標(biāo)準(zhǔn)的字符位置。
引申:寫程序時(shí)雙引號、冒號、小括號等為啥如此糾結(jié)?
--我國專家在制定GB2312字符集時(shí),ASCII里本來就有的數(shù)字、標(biāo)點(diǎn)、字母都統(tǒng)統(tǒng)重新編了兩個(gè)字節(jié)長的編碼。
是不是腦殼疼呀,想想我國程序員因?yàn)橹杏⑽那袚Q犧牲了多少寶貴時(shí)間啊,啊嘿!

總結(jié)

以上所述是小編給大家介紹的python與字符編碼問題 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

  • Python使用Pandas庫常見操作詳解

    Python使用Pandas庫常見操作詳解

    這篇文章主要介紹了Python使用Pandas庫常見操作,結(jié)合實(shí)例形式詳細(xì)分析了Python Pandas模塊的功能、原理、數(shù)據(jù)對象創(chuàng)建、查看、選擇等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Python中static相關(guān)知識小結(jié)

    Python中static相關(guān)知識小結(jié)

    static用法:是一個(gè)修飾符,用于修飾成員(成員變量,成員函數(shù)).當(dāng)成員被靜態(tài)修飾后,就多了一個(gè)調(diào)用方式,除了可以被對象調(diào)用外,還可以直接被類名調(diào)用,格式——類名.靜態(tài)成員。
    2018-01-01
  • Python入門教程(四十)Python的NumPy數(shù)組創(chuàng)建

    Python入門教程(四十)Python的NumPy數(shù)組創(chuàng)建

    這篇文章主要介紹了Python入門教程(四十)Python的NumPy數(shù)組創(chuàng)建,NumPy 用于處理數(shù)組,NumPy 中的數(shù)組對象稱為 ndarray,我們可以使用 array() 函數(shù)創(chuàng)建一個(gè) NumPy ndarray 對象,需要的朋友可以參考下
    2023-05-05
  • python?pdfplumber庫批量提取pdf表格數(shù)據(jù)轉(zhuǎn)換為excel

    python?pdfplumber庫批量提取pdf表格數(shù)據(jù)轉(zhuǎn)換為excel

    這篇文章主要為大家介紹了python使用pdfplumber庫批量提取pdf表格數(shù)據(jù)轉(zhuǎn)換為excel格式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于matplotlib+tkinter實(shí)現(xiàn)簡單的繪圖系統(tǒng)

    基于matplotlib+tkinter實(shí)現(xiàn)簡單的繪圖系統(tǒng)

    在理解matplotlib嵌入到tkinter中的原理之后,就已經(jīng)具備了打造繪圖系統(tǒng)的技術(shù)基礎(chǔ),所以本文來實(shí)現(xiàn)一個(gè)簡單的繪圖系統(tǒng),感興趣的小伙伴小伙伴可以了解一下
    2023-08-08
  • 使用Python?VTK?完成圖像切割

    使用Python?VTK?完成圖像切割

    這篇文章主要介紹了使用Python?VTK?完成圖像切割,文章內(nèi)容基于python的相關(guān)資料展開對主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Python實(shí)現(xiàn)生命游戲的示例代碼(tkinter版)

    Python實(shí)現(xiàn)生命游戲的示例代碼(tkinter版)

    生命游戲是由劍橋大學(xué)約翰·何頓·康威設(shè)計(jì)的計(jì)算機(jī)程序,一時(shí)吸引了各行各業(yè)一大批人的興趣。本文將用Python實(shí)現(xiàn)這一游戲,感興趣的可以嘗試一下
    2022-08-08
  • Python3通過字符串訪問和修改局部變量的方法實(shí)例

    Python3通過字符串訪問和修改局部變量的方法實(shí)例

    最近在看python中nonlocal和global的使用,參考網(wǎng)上的大作,寫了點(diǎn)自己的心得,下面這篇文章主要給大家介紹了關(guān)于Python3通過字符串訪問和修改局部變量的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • pytorch fine-tune 預(yù)訓(xùn)練的模型操作

    pytorch fine-tune 預(yù)訓(xùn)練的模型操作

    這篇文章主要介紹了pytorch fine-tune 預(yù)訓(xùn)練的模型操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 最新評論

    泾阳县| 鄂尔多斯市| 宣恩县| 阿图什市| 资溪县| 紫金县| 安阳市| 巩义市| 松阳县| 崇仁县| 万全县| 涿鹿县| 清原| 边坝县| 洛阳市| 柳林县| 波密县| 永胜县| 沈丘县| 浦东新区| 绥棱县| 革吉县| 建湖县| 山丹县| 平顶山市| 临西县| 平阴县| 霸州市| 天门市| 韩城市| 博爱县| 柳河县| 永兴县| 吴忠市| 四子王旗| 湛江市| 秦皇岛市| 南平市| 临桂县| 华池县| 曲阳县|