一:學習內容
二:獲取更改系統編碼
1. 獲取系統編碼
import sys
print sys.getdefaultencoding()
2. 更改系統編碼
#encoding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print 1,sys.getdefaultencoding()
print 2,type(u"我
")print 3,type("我
")print 4,u"我
"print 5,"我
"print 6,u"我
".encode('utf-8')
print 7,u"我
".decode('utf-8')
print 8,"我
".encode('utf-8').decode('utf-8')
print 9,"我
".decode('utf-8').encode('gbk')
print 10,"我
".encode('gbk')
執行結果為:
問題一:為什麼要reload sys模組
在site.py檔案裡有這麼一段**:
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
在sys載入後,setdefaultencoding方法被刪除了,所以我們要通過重新匯入sys來設定系統編碼。
問題二:
為什麼print 4,u"我"可以列印正常,print 5,"我"列印亂碼
字串的列印,python的邏輯為:如果是unicode字串,則可以自動編碼為終端所用編碼,然後正確顯示出來。所以u"我"實際上將"我"進行了decode成了unicode字元,然後python將unicode字串自動化編碼為gbk(我的cmd的編碼)
而print 5,」我」,字串編碼為utf-8型別(檔案儲存
的型別),輸出到cmd為
gbk型別的終端上,則無法顯示。
問題三:為什麼print 8,"我".encode('utf-8').decode('utf-8')可以列印正常,print 6,u"我".encode('utf-8')列印亂碼
因為我是str型別,在
encode前,python自動會用預設編碼(setdefaultencoding)進行decode為unicode型別,但是如果預設編碼為ascii,是不支援
decode
的。
可以看到檔案裡修改了預設編碼為utf-8,所以"我".encode('utf-8').decode('utf-8')這句首先會decode('utf-8')為unicode型別,然後在encode('utf-8').decode('utf-8'),此時」我」已經變成了unicode型別,如果是unicode字串,則可以自動編碼為終端所用編碼(這是問題一中提到的),這樣就能輸出到cmd終端了。
然後我們再說為什麼print 6,u"我".encode('utf-8')會亂碼呢,上面已經講了在encode('utf-8')之前會decode('utf-8')為unicode型別,然後在執行.encode('utf-8'),此時」我」會被編碼成utf-8,然後print輸出到cmd的gbk終端,由於編碼不統一,就會亂碼。
三:判斷字元的編碼型別
1. chardet.detect(字元內容)
#encoding=utf-8
import chardet
import urllib
testdata = urllib.urlopen('').read()
print chardet.detect(testdata)
發現列印的字元編碼型別為utf-8。
第二步:解壓 chardet-2.1.1.tar.gz檔案到\lib\site-packages下
第三步:安裝 chardet模組,進入到python的\lib\site-packages\chardet-2.3.0路徑下,執行python setup.py install
這樣就完成chardet模組安裝了,此時你可以在去執行上面的檔案。
四:檔案儲存和讀取的編碼
1. 計算機記憶體中,統一使用unicode編碼,當需要儲存到硬碟或需要傳輸的時候,就轉換為utf-8編碼
2. 用記事本編輯的時候,從檔案讀取的utf-8字元
被轉換為unicode字元到記憶體裡,編輯完成後,儲存的時候再把unicode轉換為utf-8儲存
到檔案
3. 瀏覽網頁的時候,伺服器會把動態生成的unicode內容
轉換為utf-8在
傳輸到瀏覽器
很多網頁原始碼上會有類似
的資訊,表示該網頁正是用的utf-8編碼
小記:a. 在utf-8檔案中,則這個字串就是utf-8編碼的,它的編碼取決與當前的文字編碼。
b. gb2312文字的編碼就是gb2312。
c. 在同乙個文字中進行兩種編碼的輸出等操作就必須進行編碼的轉換,先用decode將文字原來的編碼轉換成unicode,再用encode將編碼轉換成需要轉換成的編碼。
d. 例項練習:
手工建立乙個檔案如a.txt,以ansi編碼儲存即gbk,然後取出資料變成utf-8編碼儲存到b.txt檔案中,檢視b.txt檔案編碼為utf-8
#encoding=utf-8
f=open('c:\\users\\yumeiling\\desktop\\a.txt','r')
data=f.read()
temp = data.decode('gbk')
f.close()
f=open('c:\\users\\yumeiling\\desktop\\b.txt','w')
temps=temp.encode('utf-8')
f.write(temps) #寫入utf-8字元,並進行儲存
f.close()
執行結果為:檢視b.txt檔案
這樣執行後,發現生成了b.txt檔案,檔案的編碼為改成了utf-8編碼。
Python2學習筆記(2)
python 中可以直接處理的資料型別包括整數 浮點數 字串 布林值 空值。此外,python還提供了list 字典等資料型別。同時也允許自定義資料型別。30 3 10 10 3 3 10.0 3 3.3333333333333335 10 3.0 3.3333333333333335 print ...
Python2學習筆記(1)
python是用來編寫程式的高階程式語言,其適用範圍如下 python有大量的基礎庫,容易編寫。缺點有 python有命令列模式和互動模式兩種執行 的環境。在互動模式下 在命令列模式下,輸入python回車即可跳轉到該模式 直接輸入 回車即可 在命令列模式下 python檔案以.py結尾,執行時用命...
Python2學習筆記(3)
python內建的一種資料型別列表,是一種有序的集合。可隨時增加和刪除元素。name a b c grade 12,34,10 grade 12,34,10 len grade 3 a 空的list,長度為0 len a 0 name 0 索引從0開始 a name 2 c name 3 下標越界,...