Python中必备知识点:对字符编码的基本操作
字符編碼
(注意:關(guān)于字符編碼,如果沒(méi)有特殊業(yè)務(wù)要求,請(qǐng)牢記僅使用UTF-8編碼)
由于Python的字符串類型是str,在內(nèi)存中以Unicode表示,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes。
Python對(duì)bytes類型的數(shù)據(jù)用帶b前綴的單引號(hào)或雙引號(hào)表示:
x = b'ABC'要注意區(qū)分’ABC’和b’ABC’,前者是str,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)。
以Unicode表示的str通過(guò)encode()方法可以編碼為指定的bytes,例如:
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'反過(guò)來(lái),如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes。要把bytes變?yōu)閟tr,就需要用decode()方法:
>>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'如果bytes中包含無(wú)法解碼的字節(jié),decode()方法會(huì)報(bào)錯(cuò):
>>> b'\xe4\xb8\xad\xff'.decode('utf-8') Traceback (most recent call last):... UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte如果bytes中只有一小部分無(wú)效的字節(jié),可以傳入errors='ignore’忽略錯(cuò)誤的字節(jié):
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'len()函數(shù)計(jì)算的是str的字符數(shù),如果換成bytes,len()函數(shù)就計(jì)算字節(jié)數(shù)在操作字符串時(shí),我們經(jīng)常遇到str和bytes的互相轉(zhuǎn)換。
為了避免亂碼問(wèn)題,應(yīng)當(dāng)始終堅(jiān)持使用UTF-8編碼對(duì)str和bytes進(jìn)行轉(zhuǎn)換。
文本文件設(shè)置utf-8讀取
由于Python源代碼也是一個(gè)文本文件,所以,當(dāng)你的源代碼中包含中文的時(shí)候,在保存源代碼時(shí),就需要?jiǎng)?wù)必指定保存為UTF-8編碼。
當(dāng)Python解釋器讀取源代碼時(shí),為了讓它按UTF-8編碼讀取,我們通常在文件開(kāi)頭寫上這兩行:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-第一行注釋是為了告訴Linux/OS X系統(tǒng),這是一個(gè)Python可執(zhí)行程序,Windows系統(tǒng)會(huì)忽略這個(gè)注釋;
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會(huì)有亂碼。
會(huì)了嗎?不會(huì)關(guān)系,小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025,群里有大量基礎(chǔ)入門知識(shí),都是從零開(kāi)始的,群里還有專業(yè)的人給你解答問(wèn)題。尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)PDF電子書!
總結(jié)
以上是生活随笔為你收集整理的Python中必备知识点:对字符编码的基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python列表操作:统计列表中的重复项
- 下一篇: Python必备知识点:对Json的基本