字元集與編碼
character set 是字元集(字符集); encoding 是編碼。
對於 BIG5 (或其他專為單一語言設計的簡單碼) 來說,這兩者可說是同一回事; 但對於 unicode 來說,就很明顯地可以看出這是兩回事。 unicode 是字元集 character set;而 utf8 是它的眾多編碼 encoding 之一,最多人用的那種。不過由於歷史因素,很多文件/軟體選單仍舊將兩者混用。多數時候並不至於造成混淆與困擾。
對於 BIG5 (或其他專為單一語言設計的簡單碼) 來說,這兩者可說是同一回事; 但對於 unicode 來說,就很明顯地可以看出這是兩回事。 unicode 是字元集 character set;而 utf8 是它的眾多編碼 encoding 之一,最多人用的那種。不過由於歷史因素,很多文件/軟體選單仍舊將兩者混用。多數時候並不至於造成混淆與困擾。
在電腦內部利用二進制數字表示字符。字符編碼就是利用二進制的數字來對應字符集的字符,此二進制數字便是系統內碼。例如目前用得最普遍的字符集是ANSI,對應ANSI字符集的二進制編碼就稱為ANSI碼,DOS和Windows系統都使用了ANSI碼。
字元集
(符號的集合) |
字元編碼,內碼
(顯示符號的方法,編碼順序) |
說明
|
ASCII |
ASCII 7bits
BCDIC(2+4)
EBCD(2+4)
|
可將文字存成7個位元。常見於一般個人電腦,基本以7位元為編碼,可表示2^7=128字元,。ASCII第1至第31為特殊控制碼
以4個位元為一組,表示十進位的值。故共有6種變化未使用
標準BCD碼又稱BCDIC碼。於BCD前方加上2個位元,共有6位元所可以表示的符號共有64個
使用6個位元將字元編碼,所表示的符號共有2^6=64種符號,原是配合IBM公司打字機而開發,便於資訊傳遞
為IBM公司所發展,所表示的符號有26個。IBM與FACOM電腦一般採用此碼,為常用的通訊碼
|
OEM(ANSI) |
ASCII 8bits
ISO8859-1(又名Latin-1)
Windows-1252
(Windows 9X對西歐語言的標準)
Microsoft Code Page 950
各類編碼請參考維基百科.ISO8859
|
在Windows系統下,你可以利用「控制台\地區及語言選項」設定作業系統在使用非unicode語言的方式。如右圖所示
|
DBCS | BIG5,JIS,GB2312,EUC |
雙位元組字元集Double Byte Character Set
* GB碼:GB碼是1980年國家公佈的簡體漢字編碼方案,在大陸、新加坡得到廣泛的使用,也稱國標碼。國標碼對6763個漢字集進行了編碼,涵蓋了大多數正在使用的漢字。
* GBK碼:GBK碼是GB碼的擴展字符編碼,對多達2萬多的簡繁漢字進行了編碼,向下與GB碼兼容,簡體版Windows是使用GBK作系統內碼。 *GB 18030:《資訊交換用漢字編碼字元集基本集的擴充》,是中華人民共和國現時最新的內碼字集,與GB2312-80與GBK相容,包含所有GB13000-93及Unicode 3.1字元。 * BIG5碼:BIG5碼是針對繁體漢字的漢字編碼,目前在台灣、香港的電腦系統中得到普遍應用,繁體版Windows是用Big5作系統內碼。 * HZ碼:HZ是GB碼的變體,只用每個字節的首7-bit作編碼(即ANSI的首128個字符),常用於網絡資料傳送。 * JIS: 日文編碼,即ISO-2022-JP,只用每個字節的首7-bit作編碼,常用於網絡資料傳送。 * Shift-JIS: Microsoft制訂的日文編碼標準,適用於Windows日文平台。 * EUC-JP: 常用於日文Unix平台,日文的PHP及MySQL多用這種編碼編寫。 |
Unicode 統一碼,萬國碼 |
UTF8,UTF16,UTF32
BASE 64
|
將字母對應到code point。在Windows系統下可以利用charmap指令把數字找到
Unicode字符集在實際傳輸過程中,由於不同系統平臺的設計不一定一致,以及考量節省空間的目的,各個系統平臺對 Unicode 編碼的呈現方式有所不同。Unicode的呈現方式稱為Unicode轉換格式(Unicode Translation Format,簡稱為 UTF)。目前通用的呈現方式是UTF-16和 UTF-8。此外,Unicode 的呈現方式還包括UTF-7、Punycode、CESU-8、SCSU、UTF-32等
* UTF-8: Unicode 的變體,用 8-bit 編碼,每個字符由一至四個字節組成。
* Unicode 碼:Unicode碼是最新的國際標準編碼,採用二個字節 (16-bit) 編碼,收入了幾乎所有國家的文字符號,適用於所有語言的作業平台,但與ANSI碼不兼容,只應用於支援Unicode的程式。Unicode Little Endian普遍用於x86系統(ie. Intel),而 Unicode Big Endian 普遍用於RISC 系統 (ie. Alpha, Mac)。
The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable,電子郵件編碼
|
某些字符集不需經過編碼即可使用,例如BIG5碼
數字資料(整數)
為不含小數點的數字,可用聚集pack、非聚集unpack與一般二進位方式表示
聚集pack十進制 (BCD編碼) | 以十進位方式表示,以如下的格式儲存:
| |||||||||||||||
非聚集unpack十進制
或稱區域十進制
(BCDIC,ASCII,EBCDIC編碼) | 以二進位方式表示,以EBCDIC型式儲存10進位數值於記憶體內,以如下格式儲存:
| |||||||||||||||
範例 [聚集與非聚集的比較] |
|
數字資料(定點數表示法)
定點數乃是表示小數點固定於某位置的數。應可以分為有號數與無號數,無號數沒有符號位元(可表示範圍:0~2n-1);有號數則以1bit作為符號位元。符號位元以0表示正值,以1表示負值。例如BASIC語言中的整數與長整數。例如:以2byte表示整數,則:
無號數表示法 | 53 | 0000000000110101 | ||||||
有號數表示法 | -53 |
|
假設以n位元表示數值,則各型態補數可表示的範圍:
2的補數 sign 2's complement | n個位元要表示正負值,便必須分一半(除2)。所以負值的部分可表示值便是-(2n/2)=-2n-1;正值部分為2n,但因0為正值的開始表示值,所以需扣除0便是2n-1-1 | |
1的補數 sign 1's complement | 以n位元表示正負值,除了中間的0外(有+0與-0兩種),其餘正負值部分除符號不同外,為對稱互表補數。正值部分的最大值為2n-1-1,所以負值的最小值為正值加上負號-(2n-1-1) | |
符號絕對值 sign-magnitude | 利用1個位元表示符號,最大值與最小值均與1的補數表示法相同 |
定點數表示法的運算速度快。
數字系統:
常用的數字系統為10進位,2進位,8進位與16進位
表示法
(4096)10=4*103+0*102+9*101+6*100
(7562)8=7*83+5*82+6*81+2*80
在電腦硬體設計過程或組合語言程式設計,大都採用十六進制表示。
數字系統的轉換
10<-->2,8,16
2<-->8,16
8<-->16
含小數點的實數轉換
非上述數系的轉換
補數
電腦系統中的補數計有1的補數(1's)與2的補數(2's)兩種,如果遇到減法計算,便將減數轉換為補數,再進行加法計算
例如:35 - 57 = 35 + ( -57 ) = 35 + 43 = 78(,無溢位,必須作補數處理)= -22,最後運算結果,轉換為2進位制
補數的轉換方式
數字系統的四則運算
範例1:某計算機有24K記憶體,若第一個位元組之位址為&H0000,則最後一個位元組之位址為?
|
解法:
|
範例2:一程式在記憶體內的位址範圍由&HAC20到&HBC1F,試問該程式所佔的記憶體空間大小為多少個位元組? |
解法:
|
範例3:一程式的大小為10K,在記憶體的起始位址為1234H,則終止位址為? | |
範例4:某程式目前的程式計數器指向位址&H20000,該程式每段指令碼長度為4,請問執行20個指令後,程式計數器指向的新位址為?(以16進位位址表示)
|
參考網站:
沒有留言:
張貼留言