前言
字符編碼非常容易出問題,我們要牢記幾句話:
1.用什么編碼保存的,就要用什么編碼打開
2.程序的執行,是先將文件讀入內存中
3.unicode是父編碼,只能encode解碼成其他編碼格式
utf-8,GBK這些是子8編碼,只能decode編碼成Unicode
一、什么是字符編碼
我們知道,計算機只能識別二進制,我們平時寫的代碼都需要轉成二進制才能被計算機識別。所以,我們寫的字符怎么轉換成二進制呢,這個過程實際就是通過一個標準使我們寫的字符與特定數字一一對應,這個標準就稱為字符編碼。
字符------(字符編碼)------->數字
二、字符編碼發展歷程
1.ASCII碼
計算機起源于美國,字符編碼也起源于美國。但是美國人民使用的文字只有26個字母,再加上些特殊符號就搞定了。不像我們中國,小學生就要認識幾千個漢字。所以美國人民就使用了ASCII碼(美國信息交換標準碼)作為字符編碼,一個Bytes代表一個字符,1Bytes=8bit,可以有2的8次方即256中不同的變化,但最初只用了前7位,即127個字符,已經足夠美國人民使用了(當然也出于成本的考慮)。后來將拉丁文編入第8位,至此,ASCII碼就被占滿了,英語國家和拉丁國家可以愉快的玩耍了。
2.GBK
別看咱們中國暫時科技比不上美帝國,但是咱們有一顆積極向上的心啊,于是,在1980年,國家標準總局發布了中文使用的字符編碼-->GBK,使用兩個字節表示一個漢字,這樣就有2的16次方即65536種組合,已經足夠漢字使用了。
同時,其他國家也分別發布了自己國家的字符編碼標準,如日本的shift_JIS,韓國的Euc-kr等等
3.Unicode
據說,字符編碼鼎盛時期有數百種,且彼此間互相不支持,看來各國人民都很有骨氣,但是這太不利于世界的互通了,于是Unicode應運而生。1994年,國際標準化組織發布了號稱萬國碼的Unicode,用兩個字節表示一個字符,有65536種組合,已經能把全世界絕大多數語言包括了。
4.utf-8
Unicode雖然好,但有一個問題,本來用一個字節就能表示的英文,現在要用兩個字節,存儲空間平白多出一倍,這顯然是不完美的,所以又產生了utf-8,對英文字符只用1個字節,對中文字符用3個字節來表示。
5.Unicode所有字符都是兩個字節,簡單粗暴,字符轉換成數字的速度快,但是占用存儲空間大
utf-8對不同的字符采用不用的長度表示,節省空間,但是轉換效率不如Unicode快
內存中使用的字符編碼是Unicode,內存就是為了加快速度的,所以寧肯犧牲一點空間,也要保證速度
硬盤和網絡傳輸是用utf-8的,因為磁盤I/O或者網絡I/O延遲要遠大于utf-8的轉換效率,并且在網絡傳輸中應該盡可能節省帶寬
新聞熱點
疑難解答