若是不聲明編碼,則中文會報錯,即便是註釋也會報錯。python
# -*- coding: UTF-8 -*- 或者 #coding=utf-8 就好了 。 在第一行不區分大小寫。markdown
文檔編碼是一種告訴程序——不管是計算機的操做系統仍是Python 代碼——讀取文檔的規則。正確讀取一個文檔,每每須要先知道文件的擴展名,由於編碼方式每每與擴展名有很大的關係。函數
(1)純文本文檔的獲取與處理:直接用urlopen讀取後,用read()函數獲取文本內容便可。純文本頁面不要轉換成BeautifulSoup對象,由於沒法解析,會被認爲是一堆字符串,只能用字符串的操做方法來解析。
(2)CSV文檔、PDF文檔等非純文本文檔的讀取方式:直接經過文檔獲取連接以字符串的方式讀取文檔——經過io庫的StringIO函數將字符串轉換爲StringIO對象——經過CSV庫或PDF庫將StringIO對象讀取爲相應格式的文檔,post
編碼類型:網站
(1)UTF-8:統一字符集-轉換格式8位。它的開頭有標記指示字符佔了用了多少個字節來表示,一個字符最多有四個字節。 (2)ASCII:每一個字符7位,用來表示中文會不夠用,可是英文夠用了。 (3)UtF-8和ASCII的結合:首位爲0,即只包含一個字節的UTF-8字符和ASCII通用,由於至關於只用到了7位。但首位爲1的兩字節UTF-8字符不通用。 (4)ISO編碼:解決非英文非中文語言文檔太大的問題,好比土耳其語沒有那麼多字符,又不能用單純的ASCII。所以使用ASCII的首位來作特殊化,能夠針對不一樣的語言生成不一樣的規則。
Encode和Decode:編碼
字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。atom
decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode(‘gb2312’),表示將gb2312編碼的字符串str1轉換成unicode編碼。url
encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode(‘gb2312’),表示將unicode編碼的字符串str2轉換成gb2312編碼。spa
所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼操作系統