文字碼

在我進公司之後,才處理到多國語言的程式,當時真是讓我傷透腦筋,有很長一段時間都對字碼的處理非常頭疼。後來痛定思痛,決心從頭開始,並且做好轉換,後來完成這幾個函式,之後都讓我省了很多心。讀文字檔的部分也能處理,不管是 UTF-8、big5、unicode 都能正常處理。

123.jpg

--

關於 ASCII、BIG-5、Unicode、UTF-8

原本的 128 字 ASCII 標準內碼只有英文字母,後來用 8 個 bit 湊成 256 字的擴充 ASCII 內碼,順帶將歐洲語文加進去。

但是亞洲國家的文字沒有在 ASCII 中,數量也相當龐大,因此這些國家各自定義了雙位元組的內碼標準,例如台灣的 BIG-5,日本的 JIS 碼。在這些內碼環境中,在一份文件檔案中可能會夾雜單位元組(Single Byte Charcater Set, SBCS)的 ASCII 碼以及各國自己的雙位元組(Double Byte Charcater Set, DBCS)內碼,這種混用方式稱為 Multi-Byte Character Set(MBCS)。

而統一起全世界的內碼,就是 Unicode 的源起,Unicode 的長度是 16 位元,雙位元組可容納 65536 字,開頭的 256 字和 ASCII 相同,再放入各國語言。

Unicode 的最初目標是希望採用 16 位元編碼指定超過 65,000 個字元,然而要讓現存所有軟體適應 16 位元資料,必須花費可觀的重新開發成本。Unicode 於是發展出三種不同的編碼形式 UTF-8、UTF-16 和 UTF-32,這三種格式針對同樣的共同字元加以編碼,允許相同的資料以位元組、字組或雙字組形式傳送,並且可在無資料損失下轉換成其它格式。

UTF是Unicode/UCS Transformation Format,即把Unicode轉做某種格式的意思。

UTF-8 是針對 Unicode 的一種可變長度字元編碼。它可以用來表示 Unicode 標準中的任何字元,最常見於 HTML 與相關協定中。此一格式有趣的地方是原先存在於 ASCII 的字元和 UTF-8 中的同一字元,擁有同樣的的字元值。例如,A 在 ASCII 和 UTF-8 中都是 0x41。大多數現有軟體不需重新撰寫,便可使用轉換成 UTF-8 的 Unicode 字元。

UTF-16 使用在需要同時考量字元存取效率和儲存空間的環境。

UTF-32,對每一個 Unicode 碼位使用恰好 32 位元。其它的 Unicode transformation formats 則使用不定長度編碼。因為 UTF-32 對每個字元都使用 4 位元組,就空間而言,是非常沒有效率的。但對於一些無須考慮記憶體空間,但要求字元存取必須是固定長度且佔用單一編碼單位(single code unit)的環境,UTF-32 則是最佳的選擇。

arrow
arrow
    創作者介紹
    創作者 kamory 的頭像
    kamory

    伊卡洛斯之翼

    kamory 發表在 痞客邦 留言(0) 人氣()