在開發(fā)Python程序的過程中罗岖,會涉及到三個方面的編碼:
? ? ? 1、Python程序文件的編碼
? ? ? 2膳凝、Python程序運行時環(huán)境(IDE)的編碼
? ? ? 3控妻、Python程序讀取外部文件迂烁、網(wǎng)頁的編碼
1、Python程序文件的編碼
? ? ? 例如:
? ? ? Python2自帶的IDE递鹉,當(dāng)創(chuàng)建了一個文件保存的時候提示:
? ? 這是因為Python2編輯器默認(rèn)的編碼是ASCII盟步,它是無法識別中文的,所以會彈出這樣的提示躏结。這也是我們在大多情況下寫python2程序的時候習(xí)慣在程序的第一行加上:#coding=utf-8
? ? ? 其實却盘,這里的編碼文件是很容易解決的。
2媳拴、Python程序運行時環(huán)境(IDE)的編碼
? ? ? 執(zhí)行下面的一段程序黄橘。
? ? ? #coding=utf-8from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 返回百度頁面底部備案信息 text = driver.find_element_by_id("cp").text print(text) driver.close()
? ? ? 在windows cmd下執(zhí)行:
? ? ? 我們要獲取的信息是:
? ? ? ?2015 Baidu 使用百度前必讀 意見反饋 京ICP證030173號
? ? ? Windows cmd 用的是cp936,也就是中文的GB2312屈溉,在GBK的字符集里沒有“?”旬陡,這就導(dǎo)致通過GBK解析的時候出現(xiàn)編碼問題。
? ? ? 這就像你在翻譯英文的時候语婴,出現(xiàn)了一個單詞描孟,這個單詞你查遍了牛津大詞典都沒找到對應(yīng)的含義解釋,那么自然是會有問題的砰左。
? ? ? 那假設(shè)匿醒,我還就想在cmd下執(zhí)行這個python程序了,那么可以去修改cmd的默認(rèn)編碼類型為utf-8缠导,對應(yīng)的編碼為CHCP 65001(utf-8)廉羔。在cmd 下輸入:chcp 65001 命令回車。
? ? 然后僻造,修改cmd的字體為“Lucida Console”憋他,再來執(zhí)行程序就可以被正確輸出了。
3髓削、Python程序讀取外部文件竹挡、網(wǎng)頁的編碼
認(rèn)識常見編碼
? ? ? GB2312是中國規(guī)定的漢字編碼,也可以說是簡體中文的字符集編碼
? ? ? GBK 是 GB2312的擴(kuò)展 ,除了兼容GB2312外立膛,它還能顯示繁體中文揪罕,還有日文的假名
? ? ? cp936:中文本地系統(tǒng)是Windows中的cmd,默認(rèn)codepage是CP936宝泵,cp936就是指系統(tǒng)里第936號編碼格式好啰,即GB2312的編碼。
? ? ? (當(dāng)然有其它編碼格式:cp950 繁體中文儿奶、cp932 日語框往、cp1250 中歐語言。闯捎。椰弊。)
Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案嘁酿。UTF-8、UTF-16男应、UTF-32都是將數(shù)字轉(zhuǎn)換到程序數(shù)據(jù)的編碼方案闹司。
? ? ? UTF-8 (8-bit Unicode Transformation Format)是最流行的一種對 Unicode 進(jìn)行傳播和存儲的編碼方式。它用不同的 bytes 來表示每一個代碼點沐飘。ASCII 字符每個只需要用一個 byte 游桩,與 ASCII 的編碼是一樣的。所以說 ASCII 是 UTF-8 的一個子集耐朴。
代碼頁是字符集編碼的別名借卧,也有人稱"內(nèi)碼表"。早期筛峭,代碼頁是IBM稱呼電腦BIOS本身支持的字符集編碼的名稱铐刘。當(dāng)時通用的操作系統(tǒng)都是命令行界面系統(tǒng),這些操作系統(tǒng)直接使用BIOS供應(yīng)的VGA功能來顯示字符影晓,操作系統(tǒng)的編碼支持也就依靠BIOS的編碼×常現(xiàn)在這BIOS代碼頁被稱為OEM代碼頁。圖形操作系統(tǒng)解決了此問題挂签,圖形操作系統(tǒng)使用自己字符呈現(xiàn)引擎可以支持很多不同的字符集編碼疤祭。
早期IBM和微軟內(nèi)部使用特別數(shù)字來標(biāo)記這些編碼,其實大多的這些編碼已經(jīng)有自己的名稱了饵婆。雖然圖形操作系統(tǒng)可以支持很多編碼勺馆,很多微軟程序還使用這些數(shù)字來點名某編碼。
下表列出了所有支持的代碼頁及其國家(地區(qū))或者語言:
代碼頁? ? ? 國家(地區(qū))或語言
437? ? ? ? ? 美國
708? ? ? ? ? 阿拉伯文(ASMO 708)
720? ? ? ? ? 阿拉伯文(DOS)
850? ? ? ? ? 多語言(拉丁文 I)
852? ? ? ? ? 中歐(DOS) - 斯拉夫語(拉丁文 II)
855? ? ? ? ? 西里爾文(俄語)
857? ? ? ? ? 土耳其語
860? ? ? ? ? 葡萄牙語
861? ? ? ? ? 冰島語
862? ? ? ? ? 希伯來文(DOS)
863? ? ? ? ? 加拿大 - 法語
865? ? ? ? ? 日耳曼語
866? ? ? ? ? 俄語 - 西里爾文(DOS)
869? ? ? ? ? 現(xiàn)代希臘語
874? ? ? ? ? 泰文(Windows)
932? ? ? ? ? 日文(Shift-JIS)
936? ? ? ? ? 中國 - 簡體中文(GB2312)
949? ? ? ? ? 韓文
950? ? ? ? ? 繁體中文(Big5)
1200? ? ? ? Unicode? ? ? ?
1201? ? ? ? Unicode (Big-Endian)
1250? ? ? ? 中歐(Windows)
1251? ? ? ? 西里爾文(Windows)
1252? ? ? ? 西歐(Windows)
1253? ? ? ? 希臘文(Windows)
1254? ? ? ? 土耳其文(Windows)
1255? ? ? ? 希伯來文(Windows)
1256? ? ? ? 阿拉伯文(Windows)
1257? ? ? ? 波羅的海文(Windows)
1258? ? ? ? 越南文(Windows)
20866? ? ? ? 西里爾文(KOI8-R)
21866? ? ? ? 西里爾文(KOI8-U)
28592? ? ? ? 中歐(ISO)
28593? ? ? ? 拉丁文 3 (ISO)
28594? ? ? ? 波羅的海文(ISO)
28595? ? ? ? 西里爾文(ISO)
28596? ? ? ? 阿拉伯文(ISO)
28597? ? ? ? 希臘文(ISO)
28598? ? ? ? 希伯來文(ISO-Visual)
38598? ? ? ? 希伯來文(ISO-Logical)
50000? ? ? ? 用戶定義的
50001? ? ? ? 自動選擇
50220? ? ? ? 日文(JIS)
50221? ? ? ? 日文(JIS-允許一個字節(jié)的片假名)
50222? ? ? ? 日文(JIS-允許一個字節(jié)的片假名 - SO/SI)
50225? ? ? ? 韓文(ISO)
50932? ? ? ? 日文(自動選擇)
50949? ? ? ? 韓文(自動選擇)
51932? ? ? ? 日文(EUC)
51949? ? ? ? 韓文(EUC)
52936? ? ? ? 簡體中文(HZ)
65000? ? ? ? Unicode (UTF-7)
65001? ? ? ? Unicode (UTF-8)