字符集,指的是被分配了整數(shù)編號的
字符集合;
但是,編碼字符集中字符被分配的整數(shù)編號,不一定就是該字符在計算機中存儲時所使用的值;
計算機中存儲的字符到底使用什么二進制整數(shù)值來表示,是由
字符集編碼決定的。
字符集編碼決定了如何將一個字符的整數(shù)編號對應到一個二進制的整數(shù)值。
有的編碼方案簡單的將該整數(shù)值直接作為其在計算機中的表示而存儲,例如英文字符。
幾乎所有的字符集編碼方案中,英文字母的整數(shù)編號與其在計算機內部存儲的二進制形式都一致。
但有的編碼方案,例如適用于Unicode字符集的UTF-8編碼形式,就將很大一部分字符的整數(shù)編號作了變換后存儲在計算機中。
以“漢”字為例,“漢”的Unicode值為0x6C49,但其編碼為UTF-8格式后的值為0xE6B189(注意到變成了三個字節(jié))。
GB2312最初指的是一個編碼字符集,其中包含了ASCII所包含的英文字符,同時加入了6763個簡體漢字以及其他一些ASCII之外的符號。GB2312也有自己的編碼方案,但這個方案直接使用一個字符在GB2312中的編號作為存儲值(與UTF-32的做法類似)。
我們日常說起GB2312的時候,
常常即指這個字符集,也指這種編碼方案。
GBK是GB2312的后續(xù)標準,添加了更多的漢字和特殊符號,類似的是,GBK也是同時指他的字符集和他的編碼。
GBK還是現(xiàn)如今中文Windows操作系統(tǒng)的系統(tǒng)默認編碼(這正是幾乎所有網(wǎng)頁上的,文件里的亂碼問題的根源)。
在Java中,字符只以一種編碼形式存在,那就是UTF-16。
但“在Java中”到底是指在哪里呢?就是指在JVM中,在內存中,代碼里聲明的每一個char,String類型的變量中。
Python中既可以按Ascii編碼,也可以按unicode編碼。