python直譯器在載入 .py 檔案中的**時,會對內容進行編碼(預設ascill),ascii(american standard code for information interchange,美國標準資訊交換**)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(乙個位元組),即:2**8 = 256-1,所以,ascii碼最多只能表示 255 個符號。
ascii碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字元和符號的編碼,即:unicode。unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼。unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,規定雖有的字元和符號最少由 16 位來表示(2個位元組),即:2 **16 = 65536。
utf-8,是對unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存...
所以,py2直譯器在載入 .py 檔案中的**時,會對內容進行編碼(預設ascill),如果是如下**的話:
#!/usr/bin/env python
print "你好,世界"
報錯:ascii碼無法表示中文
應該顯示的告訴python直譯器,用什麼編碼來執行源**,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "你好,世界"
py2裡預設編碼是ascii
檔案開頭那個編碼宣告是告訴解釋這個**的程式 以什麼編碼格式 把這段**讀入到記憶體,因為到了記憶體裡,這段**其實是以bytes二進位制格式存的,不過即使是2進製流,也可以按不同的編碼格式轉成2進製流。
如果在檔案頭宣告了#_*_coding:utf-8*_,就可以寫中文了, 不宣告的話,python在處理這段**時按ascii,顯然會出錯, 加了這個宣告後,裡面的**就全是utf-8格式了
在有#_*_coding:utf-8*_的情況下,你在宣告變數如果寫成name=u"你好,世界",那這個字元就是unicode格式,不加這個u,那你宣告的字串就是utf-8格式
utf-8 to gbk怎麼轉,utf8先decode成unicode,再encode成gbk
py3裡預設檔案編碼就是utf-8,所以可以直接寫中文,也不需要檔案頭宣告編碼了。
你宣告的變數預設是unicode編碼,不是utf-8, 因為預設即是unicode了(不像在py2裡,你想直接宣告成unicode還得在變數前加個u), 此時你想轉成gbk的話,直接your_str.encode("gbk")即可以
但py3裡,你在your_str.encode("gbk")時,感覺好像還加了乙個動作,就是就是encode的資料變成了bytes裡,我擦,這是怎麼個情況,因為在py3裡,str and bytes做了明確的區分,你可以理解為bytes就是2進製流,你會說,我看到的不是010101這樣的2進製呀, 那是因為python為了讓你能對資料進行操作而在記憶體級別又幫你做了一層封裝,否則讓你直接看到一堆2進製,你能看出哪個字元對應哪段2進製麼?
那你說,在py2裡好像也有bytes呀,是的,不過py2裡的bytes只是對str做了個別名(python2裡的str就是bytes, py3裡的str是unicode),沒有像py3一樣給你顯示的多出來一層封裝,但其實其內部還是封裝了的。 這麼講吧, 無論是2還是三, 從硬碟到記憶體,資料格式都是 010101二進位製到-->b'\xe4\xbd\xa0\xe5\xa5\xbd' bytes型別-->按照指定編碼轉成你能看懂的文字
Python零基礎入門
python零基礎入門 第一周前言 最近在簡單學習python,在之前的學習中也只對c語言有了乙個粗略的了解,可以說在程式設計方面沒有什麼基礎,當然這也是我第一次寫部落格,希望自己越學越好,希望自己加油 在這一周中,還是學習到了不少的東西,也希望把自己學到的東西寫下來,來加強對python的學習,若...
Python入門零基礎
開始認識 不要害怕面對一串密密麻麻的英文本元。如果你將它們獨自分開,你會發現它們就像英文單詞,都有固定的作用。不要被第一眼的陌生感所產生的恐懼給蒙蔽。而要將 看成 變數 可以用來儲存字面量,變數本身沒有任何意思 如 a hello world abc 1,dfg 2,c abc dfg。其中a ab...
零基礎如何入門Python
如果你是零基礎,注意是零基礎,想入門程式設計的話,我推薦你學python。雖然國內基本上是以c語言作為入門教學,但在麻省理工等國外大學都是以python作為程式設計入門教學的。那麼如何學習python呢?第一步 先把刀磨好 注 倘若你是土豪,用的是蘋果本,恭喜你,蘋果已經內建了python,不用再安...