英文很差學起來挺困難的,其中小弟就遇到一個十分蛋疼的問題,百度了半天就沒找到解決辦法~囧~ html
摸索了半天本身解決了,記錄下來與君共勉。 python
問題提出: 數據庫
有時候咱們採集網頁,處理完畢後將字符串保存到文件或者寫入數據庫,這時候須要制定字符串的編碼,若是採集網頁的編碼是gb2312,而咱們的數據庫是utf-8的,這樣不作任何處理直接插入數據庫可能會亂碼(沒測試過,不知道數據庫會不會自動轉碼),咱們須要手動將gb2312轉換成utf-8。 函數
首先咱們知道,python裏的字符默認是ascii碼,英文固然沒問題啦,碰到中文的時候立馬給跪。 測試
不知道你還記不記得,python裏打印中文漢字的時候須要在字符串前面加 u: 編碼
print u"來搞基嗎?"這樣子中文才能顯示,這裏面的u的做用就是將後面的字符串轉換爲unicode碼,這樣中文才能獲得正確的顯示。
這裏與之相關的有一個unicode()函數,用法以下 url
str="來搞基" str=unicode(str,"utf-8") print str與u的區別是,這裏用unicode將str轉換爲unicode編碼,須要正確指定第二個參數,這裏的utf-8是我test.py腳本自身的文件字符集,默認的多是ansi。
unicode這是一個關鍵,下面繼續 spa
咱們開始抓取百度首頁,注意,遊客訪問百度首頁,查看網頁源代碼,它的charset=gb2312。 code
import urllib2 def main(): f=urllib2.urlopen("http://www.baidu.com") str=f.read() str=unicode(str,"gb2312") fp=open("baidu.html","w") fp.write(str.encode("utf-8")) fp.close() if __name__ == '__main__' : main()解釋:
咱們首先用urllib2.urlopen()方法將百度首頁抓取到,f是句柄 ,用str=f.read()將全部源代碼讀入str中 htm
搞清楚,str裏面就是咱們抓取的html源代碼,因爲網頁默認的字符集是gb2312,因此若是咱們直接保存到文件中,文件編碼將是ansi。
對於大部分人來講,其實這就足夠了,可是有時候我就想把gb2312轉換成utf-8的該怎麼辦呢?
首先:
str=unicode(str,"gb2312") #這裏的gb2312就是str的實際字符集,咱們如今將其轉換成unicode
而後:
str=str.encode("utf-8") #將unicode的字符串從新編碼成utf-8
最後:
將str寫入到文件中,打開文件看一下編碼屬性,發現是utf-8的了,把<meta charset="gb2312"改爲<meta charset="utf-8" ,就是一個utf-8的網頁了。作了這麼多其實就完成了一個gb2312->utf-8的轉碼。
總結:
咱們回顧一下,若是須要將字符串按照指定的字符集保存,有如下幾個步驟:
1:用unicode(str,"原來的編碼")將str解碼成unicode字符串
2:將unicode字符串str 使用 str.encode("指定的字符集") 轉換成你指定的字符集
3:將str保存文件,或者寫入數據庫等操做,固然,編碼你已經指定了,不是嗎?