ISO8859-1、UTF-8 與GB2312

 ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符。 而gb2312是標準中文字符集。 但是 ISO 10646 碼有下列問題: UTF-16 或 Unicode 是 16-bit 固定長度的編碼,並沒有比 Big5 或 GB2312 碼提供更大的容納空間。而 8-bit 不定長 (variable-length) 的編碼,每個中文字使用 3 個位元組 (byte)。 這意味着使用 UTF-8 編碼的 XML 文件會比使用 Big5 碼的文件大上 50%。但是假如使用 ASCII 碼的標示 (Markup),文件就不會大這麼多了。 標示大約會佔文件的 50%。可能要使文件大小減少的方式就是採用 文件壓縮了。 ISO 10646 碼中,字的順序與任何的中文碼並不同。無法使用一個 簡單的演算法 (algorithm) 就可以將 Big5 或 GB2312 碼轉換爲 ISO 10646。您得用一個轉換表來進行轉碼。但另一方面,ISO 10646 碼的中文字序有利於排序 (sorting)。而且也去除了重複字,因而 對於檢索 (searching) 也有幫助。(據說 GBK 字集包含 ISO 10646 碼中所有的字,而且保留與 GB2312 碼相同的字序。在某些情形下 可能是個好字集。)

UTF-8 是 UNICODE 的一種變長字符編碼,即 RFC 3629。簡單的說——大字符集。可以解決多種語言文本顯示問題,從而實現應用國際化和本地化。對系統來講,UTF-8 編碼可以通過屏蔽位和移位操作快速讀寫,排序更加容易。UTF-8 是字節順序無關的,它的字節順序在所有系統中都是一樣的。 UTF-8是UTF-8編碼是一種目前廣泛應用於網頁的編碼,它其實是一種Unicode編碼,即致力於把全球所有語言納入一個統一的編碼。前UTF-8已經把幾種重要的亞洲語言納入,包括簡繁中文和日韓文字。因此 UTF-8 具有更高的性能。 不過如果是純英文的話,用什麼都可以,用GB2312也沒問題。

GB2312是簡體中文編碼,當文章/網頁中包含繁體中文、日文、韓文時,這些內容可能無法被正確編碼。對於GB2312 漢字是雙字節的。所謂雙字節是指一個雙字要佔用兩個BYTE的位置(即16位),分別稱爲高位和低位。 中國規定的漢字編碼爲GB2312,這是強制性的,目前幾乎所有的能處理中文的應用程序都支持GB2312。GB2312包括了一二級漢字和9區符號,高位從0xa1到0xfe,低位也是從0xa1到0xfe,其中,漢字的編碼範圍爲0xb0a1到0xf7fe。

 

總結:

Unicode 制定組織 (Unicode Consortium) 是許多的公司聯合決定製定一個包含全世界所有文字 的巨大字集,其中也有亞洲的公司參與。例如:Fujitsu and Fuji Xerox 公司。 該組織取用 ISO 10646 字集然後加入其他的資訊:標準名稱及 特性。 Unicode 包含 GB2312 中所有的字及(可能) Big5 碼中所有的字。 而且加入了許多其他語言的文字。(ISO 10646 有幾種編碼方式: UTF-8 是 8-bit 的,而 UTF-16 是 16-bit。 Unicode 是 UTF-16 的形式。 
因此 Unicode 比 Big5 及 GB2312 碼好 - 因爲 Unicode 包含較多的字。

ISO字符集

ASCII中的"A"代表美國,因此ASCII碼專門用於書寫英語,嚴格來說是美式英語也就不足爲奇了。ASCII碼中缺少£、ü、?和許多書寫其他語言和地區所需的字符。

可通過指定128以後的更多字符擴展ASCII碼。國際標準組織(ISO)定義了幾個不同的字符集,它們是在ASCII碼基礎上增加了其他語言和 地區需要的字符。其中最突出的是ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符,其中 0~127的字符與ASCII碼相同。表7-2給出了128~255之間的字符,同樣前32個字符是極少使用的非打印控制字符。
所以對於ISO8859-1和GB2312之間的轉換就會出現麻煩了

呵呵 因爲通常異種語言之間的轉換是通過Unicode來完成的。假設有兩種不同的語言A和B,轉換的步驟爲:先把A轉化爲Unicode,再把Unicode轉化爲B。

打個比方吧 有GB2312中有一個漢字“李”,其編碼爲“C0EE”,欲轉化爲ISO8859-1編碼。步驟爲:先把“李”字轉化爲Unicode,得到 “674E”,再把“674E”轉化爲ISO8859-1字符。當然,這個映射不會成功,因爲ISO8859-1中根本就沒有與“674E”對應的字符。

總的來說 一個是中國的 一個是西歐語言
------------------------------------------------------------------------------
iso-8859-1是JAVA網絡傳輸使用的標準 字符集,而gb2312是標準中文字符集,當你作出提交表單等需要網絡傳輸的操作的時候,就需要把 iso-8859-1轉換爲gb2312字符集顯示,否則如果按瀏覽器的gb2312格式來解釋iso-8859-1字符集的話,由於2者不兼容,所以會 是亂碼.
------------------------------------------------------------------------------
漢字是雙字節的。所謂雙字節是指一個雙字要佔用兩個 BYTE的位置(即16位),分別稱爲高位和低位。中國規定的漢字編碼爲GB2312,這是強制性的, 目前幾乎所有的能處理中文的應用程序都支持GB2312。GB2312包括了一二級漢字和9區符號,高位從0xa1到0xfe,低位也是從0xa1到 0xfe,其中,漢字的編碼範圍爲0xb0a1到0xf7fe。

另外有一種編碼,叫做GBK,但這是一份規範,不是強制的。GBK提供了20902個漢字,它兼容GB2312,編碼範圍爲0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0。

在不久的將來,中國會頒佈另一種標準:GB18030-2000(GBK2K)。它收錄了藏、蒙等少數民族的字型,從根本上解決了字位不足的問題。注意: 它不再是定長的。其二字節部份與GBK兼容,四字節部分是擴充的字符、字形。它的首字節和第三字節從0x81到0xfe,二字節和第四字節從0x30到 0x39

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章