字元編碼原理
ascii字符集
共收錄128個字元,包括空格、標點符號、數字、大小寫字母和一些不可見字元。由於總共才128個字元,所以可以使用1個位元組來進行編碼,我們看一些字元的編碼方式:
'l'
->
01001100(十六進製制:0x4c,十進位制:76)
'm'->
01001101(十六進製制:0x4d,十進位制:77)
iso 8859-1字符集共收錄256個字元,是在ascii字符集的基礎上又擴充了128個西歐常用字元(包括德法兩國的字母),也可以使用1個位元組來進行編碼。這個字符集也有乙個別名latin1。
gb2312字符集
收錄了漢字以及拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母。其中收錄漢字6763個,其他文字元號682個。同時這種字符集又相容ascii字符集,所以在編碼方式上顯得有些奇怪:
這種表示乙個字元需要的位元組數可能不同的編碼方式稱為變長編碼方式
。
比方說字串'愛u'
,其中'愛'
需要用2
個位元組進行編碼,編碼後的十六進製制表示為0xb0ae
,'u'
需要用1
個位元組進行編碼,編碼後的十六進製制表示為0x75
,所以拼合起來就是0xb0ae75
。
我們怎麼區分某個位元組代表乙個單獨的字元還是代表某個字元的一部分呢?別忘了ascii
字符集只收錄128個字元,使用0~127就可以表示全部字元,所以如果某個位元組是在0~127之內的,就意味著乙個位元組代表乙個單獨的字元,否則就是兩個位元組代表乙個單獨的字元。
gbk字符集
gbk字符集只是在收錄字元範圍上對gb2312字符集作了擴充,編碼方式上相容gb2312。
unicode字符集
收錄地球上能想到的所有字元,而且還在不斷擴充。這種字符集相容ascii字符集,採用變長編碼方式,
unicode字符集
有多種編碼方案,可以採用utf8、utf16、utf32
這幾種編碼方案,utf8使用1~4個位元組編碼乙個字元,utf16使用2個或4個位元組編碼乙個字元,utf32使用4個位元組編碼乙個字元。
對於同乙個字元,不同字符集也可能有不同的編碼方式。比如對於漢字』我』來說,ascii字符集中根本沒有收錄這個字元,utf8和gb2312字符集對漢字我的編碼方式如下:
utf8編碼:
111001101000100010010001(3
個位元組,十六進製制表示是:
0xe68891
)gb2312編碼:
1011000010101110(2
個位元組,十六進製制表示是:
0xb0ae
)
在下面兩個檔案中最後一行加上 -dfile.encoding=utf-8
字元亂碼之字符集和字元編碼
最近經常會碰到上傳客戶提供的歷史資料上傳時csv檔案用excel開啟時會有亂碼問題,雖然知道知道是字元編碼不一致導致的,但其中諸多細節卻知之甚少,今日特來理理。1.為什麼會有字元亂碼問題?如何解決字元亂碼問題 計算機中儲存的資訊都是二進位制數表示的,但是世界上有各種不同的語言文字,所以我們需要一些規...
MYSQL字符集亂碼的解決
命令列下登入mysql 輸入 s 注意到有如下內容 server characterset latin1 db characterset latin1 client characterset latin1 conn.characterset latin1 mysql資料庫預設的字符集是latin1,...
字符集 編碼
字符集概念 1 字符集 可以表示的字元和字元對應計算機位元組碼的對映 2 字元編碼方式 計算機中用來表示和傳輸如前所述字符集中對映的位元組碼的編碼方式。對於ascii和gb2312等字符集,他們在傳輸和計算機表示時的位元組碼不用編碼,直接用字元對應的位元組碼表示。但比如unicode 字符集,就有多...