EASCII及ISO 8859字符編碼方案

1.
計算機出現之后,首先逐漸從美國發展到了歐洲。由於歐洲很多國家所用到的字符中,除了基本的、美國也用的那128個ASCII字符之外,還有很多衍生的拉丁字母等字符。比如,在法語中,字母上方有注音符號;而歐洲其他國家也有各自特有的字符。
考慮到一個字節能夠表示的編碼實際上有256個(2^8 = 256),而ASCII字符卻只用到了一個字節中的低7位(因此在ASCII碼中最高位總是為0),編號為0x00~0x7F(十進制為0~127)。也就是說,ASCII只使用了一個字節所能表示的256個編碼中的前128個(2^7 = 128)編碼,而后128個編碼相當於被閑置了。因此,歐洲各國紛紛打起了后面這128個編碼的主意。
2.
可問題在於,歐洲各國同時都有這樣的想法。於是各國針對后面的0x80~0xFF(十進制為128~255)這128個編碼分別對應什么樣的字符,就有了各自不同的設計。
為了結束歐洲各國這種各自為政的混亂局面,於是又先后設計了兩套統一的,既兼容ASCII碼,又支持歐洲各國所使用的那些衍生字符的單字節編碼方案:一個是EASCII(Extended ASCII)字符編碼方案,另一個是ISO/IEC 8859字符編碼方案。
(笨笨阿林原創文章,轉載請注明出處)
3.
先來說EASCII碼。EASCII碼同樣也是將ASCII中閑置的最高位(即首位)用來編碼新的字符(這些ASCII字符之外的新字符,其最高位總是為1)。換言之,也就是將一個字節中的全部8個比特位用來表示一個字符。比如,法語中的é的編碼為130(二進制1000 0010)。
顯然,EASCII碼雖與ASCII碼一樣使用單字節編碼,但卻可以表示最多256個字符(2^8 = 256),比ASCII的128個字符(2^7=128)多了一倍。
因此,在EASCII碼中,當第一個比特位(即字節的最高位)為0時,仍表示之前那些常用的ASCII字符(實際的二進制編碼為0000 0000 ~ 0111 1111,對應的十進制就是0~127),而為1時就表示補充擴展的其他衍生字符(實際的二進制編碼為1000 0000 ~ 1111 1111,對應的十進制就是128~255)。
這樣就在ASCII碼的基礎上,既保證了對ASCII碼的兼容性,又補充擴展了新的字符,於是就稱之為Extended ASCII(擴展ASCII)碼,簡稱EASCII碼。
EASCII碼比ASCII碼擴充出來的符號包括表格符號、計算符號、希臘字母和特殊的拉丁符號,如下表所示。

4.
不過,EASCII碼目前已經很少使用,常用的是ISO/IEC 8859字符編碼方案。該方案與EASCII碼類似,也同樣是在ASCII碼的基礎上,利用了ASCII的7位編碼所沒有用到的最高位(首位),將編碼范圍從原先ASCII碼的0x00~0x7F(十進制為0~127),擴展到了0x80~0xFF(十進制為128~255)。
ISO/IEC 8859字符編碼方案所擴展的這128個編碼中,實際上只有0xA0~0xFF(十進制為160~255)被實際使用。也就是說,只有0xA0~0xFF(十進制為160~255)這96個編碼定義了字符,而0x80~0x9F (十進制為128~159)這32個編碼並未定義字符。
顯然,ISO/IEC 8859字符編碼方案同樣是單字節編碼方案,也同樣完全兼容ASCII。
5.
注意,與ASCII、EASCII屬於單個獨立的字符集不同,ISO/IEC 8859是一組字符集的總稱,其下共包含了15個字符集,即ISO/IEC 8859-n,其中n=1,2,3,...,15,16(其中12未定義,所以共15個)。
這15個字符集大致上包括了歐洲各國所使用到的字符(甚至還包括一些外來語字符),而且每一個字符集的補充擴展部分(即除了兼容ASCII字符之外的部分)都只實際使用了0xA0~0xFF(十進制為160~255)這96個編碼。
其中,ISO/IEC 8859-1收錄了西歐常用字符(包括德法兩國的字母),目前使用得最為普遍。ISO/IEC 8859-1往往簡稱為ISO 8859-1,而且還有一個稱之為Latin-1(也寫作Latin1)的別名。
6.
其余從ISO 8859-2到ISO 8859-16各自所收錄的字符如下:
ISO 8859-2字符集,也稱為Latin-2,收錄了東歐字符;
ISO 8859-3字符集,也稱為Latin-3,收錄了南歐字符;
ISO 8859-4字符集,也稱為Latin-4,收錄了北歐字符;
ISO 8859-5字符集,也稱為Cyrillic,收錄了斯拉夫語系字符;
ISO 8859-6字符集,也稱為Arabic,收錄了阿拉伯語系字符;
ISO 8859-7字符集,也稱為Greek,收錄了希臘字符;
ISO 8859-8字符集,也稱為Hebrew,收錄了西伯萊(猶太人)字符;
ISO 8859-9字符集,也稱為Latin-5或Turkish,收錄了土耳其字符;
ISO 8859-10字符集,也稱為Latin-6或Nordic,收錄了北歐(主要指斯堪地那維亞半島)的字符;
ISO 8859-11字符集,也稱為Thai,從泰國的TIS620標准字符集演化而來;
ISO 8859-12字符集,目前尚未定義(未定義的原因目前有兩種說法:一是原本要設計成一個包含塞爾特語族字符集的“Latin-7”,但后來塞爾特語族變成了ISO 8859-14 / Latin-8;二是原本預留給印度天城體梵文的,但后來卻擱置了);
ISO 8859-13字符集,也稱為Latin-7,主要函蓋波羅的海(Baltic)諸國的文字符號,也補充了一些被Latin-6遺漏的拉脫維亞(Latvian)字符;
ISO 8859-14字符集,也稱為Latin-8,它將Latin-1中的某些符號換成塞爾特語(Celtic)的字符;
ISO 8859-15字符集,也稱為Latin-9,或者被戲稱為Latin-0,它將Latin-1中較少用到的符號刪除,換成當初遺漏的法文和芬蘭字母,還把英鎊和日元之間的金錢符號,換成了歐盟貨幣符號;
ISO 8859-16字符集,也稱為Latin-10,涵蓋了阿爾巴尼亞語、克羅地亞語、匈牙利語、意大利語、波蘭語、羅馬尼亞語及斯洛文尼亞語等東南歐國家語言。