最新文章

發佈時間:2018-06-03 (更新:2018-06-03 22:57)發佈者:hurt
標題:淺談文字編碼

字元編碼

字元編碼就像一本字典的目錄,電腦擁有很多本字典,我們只要告訴電腦我要某一本字典第幾頁的第幾個字,電腦就會在螢幕上送出這個字。

 

常用字典

ASCII

字典裡最小的那本是 ASCII ,只有 128 個字,收錄了數字、大小寫 a 到 z 和一些鍵盤上的基本符號,而六點點字所有的 64 種變化(含空方),都有被包含在裡面,例如 ㄅ 對應到 o 、 ㄆ 對應到 p ,所以有時候中文點字檔又會被叫作 ASCII code 檔。

 

ANSI

ANSI 是 ASCII 不夠用之後延伸出來的字典,但這個版本的字典,除了前面 ASCII 的部份是共用的以外,其他不同語言會有不同版本的字集,在台灣正體中文的部份就是 BIG-5 字集,而其他中文還有像是簡體的 GB2312 、 GBK 等字集,所以早期有一些文件,雖然是用 ANSI 字典,但用得是其他字集,我們用編輯器以 BIG-5 字集來查詢,就會查出一堆亂七八糟完全沒有邏輯的字。

 

Unicode

最新的 Unicode 一本字典包含所有語言文字和符號的字典,目前最常用的是 UTF-8 方式,幾乎所有常用的各語言的字都在這個字典裡。

 

出現亂碼

如果我寄出的郵件,使用了 A 字典的目錄,但是收信者拿了 B 字典的目錄來查內容,這樣查到的字會是亂七八糟的,又或是我使用了最新版本的 A 字典目錄,但收信者拿了內容沒那麼多的舊版 A 字典,就會有很多字查不到而出現問號;這個就可以解釋有些文件,若包含了只有 Unicode 字典裡才有的字,拿到只支援 ANSI BIG-5 字典的編輯軟體,就算經過轉換,還是有一些字會查不到,而查不到的字就會被以問號顯示。

舉例來說:家庭的「家」這個字,在 ANSI BIG-5 字典裡是編號 AE61 的字,但在 Unicode 裡是第 5BB6 個字,如果對照到錯的字典,就會找到錯的字。

再舉一個時下常用的字,上面一個「不」下面一個「要」合成「嫑」,這個字並未收錄在 ANSI BIG-5 的字典裡,所以查不到會以問號來顯示,在 Unicode 裡是編號 5AD1 的字,所以用 Unicode 編碼儲存的文件,用 ANSI BIG-5 的編碼去開啟,這個字就會以問號來顯示。

 

空間問題

使用較大本的字典當然能夠涵蓋較多的字,但也因為字典較大,它的目錄和編碼較為繁雜,要用來表示目標字的編碼就會多了一點,雖然是非常小的一點,但一個字多一點,一大篇文章還是會有一點點感覺。

 

實際應用

記事本預設是用 ANSI 編碼儲存,如果在記事本打字,使用到 Unicode 的字,在存檔時會跳出訊息:「這個檔案包含Unicode格式字元,如果您以ANSI 編碼的文字檔案來儲存這個檔案,將會遺失這些字元,若要保留Unicode資訊,請按下面的取消,然後從編碼下拉清單選擇一個Unicode選項。」此時如果還是以 ANSI 編碼存檔,那些只有在 Unicode 裡的字就會變成問號,用 Unicode 編碼存檔,再以支援 Unicode  編碼的軟體開啟,就會正常顯示;現今大部份的作業系統和軟體,都能支援 Unicode 編碼並自動判別,但較早期的作業系統和軟體則會出現問題。

有些人使用 iPhone 寄出的信,在原來的手機裡看起來正常,別人收到了卻是亂碼,原因是 iPhone 為了節省流量加快速度,會自動判別信中所有的字,是否全部屬於某一個較小的字典,如果是的話,就直接用較小字典的編碼去傳送,而收信的一方如果用錯字典去對照,就會出現問號,所以解決的方式,是在信中加一個 Unicode 才有的字或符號,例如內建的表情符號,強制 iPhone 使用 UTF-8 字集,這樣就會避免亂碼問題的發生。

 

參考網頁

ANSI和Unicode、UTF-8和UTF-16、BOM

第十天:認識文字編碼

淺談電腦編碼與 Unicode (一) 基礎概念篇

淺談電腦編碼與 Unicode (二) 基本應用篇

每個軟體開發者都絕對一定要會的Unicode及字元集必備知識

iPhone寄信居然不是用unicode?