【转】刨根究底字符编码之四——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)的別名。
(注意:圖片標題前面的“Codepage 819”表示ISO 8859-1編碼的代碼頁編號為819,有關“代碼頁”的介紹后文有詳細介紹。)
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,幾乎與泰國國家標準TIS-620(1990)字符集等同, 唯一的區別是,ISO 8859-11定義了不間斷空格NBSP(non-breaking space)字符(碼點值為0xA0),而TIS-620中則未定義該字符;
- 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,涵蓋了阿爾巴尼亞語、克羅地亞語、匈牙利語、意大利語、波蘭語、羅馬尼亞語及斯洛文尼亞語等東南歐國家語言。
?
?
重點記憶: ISO/IEC 8859-1收錄了西歐常用字符(包括德法兩國的字母),目前使用得最為普遍。ISO/IEC 8859-1往往簡稱為ISO 8859-1,而且還有一個稱之為Latin-1(也寫作 Latin1 )的別名。
?
其中,ISO 8859-1 見于默認的 HTML 編碼格式!(Eclipse 中)
其中,Latin 1 見于 MySQL 默認的編碼格式!
?
總結
以上是生活随笔為你收集整理的【转】刨根究底字符编码之四——EASCII及ISO 8859字符编码方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 19包!男子扛1200斤硬币买比亚迪汽车
- 下一篇: AMD工程师神优化:几行代码让Zen处理