Unicode及字元集必備知識

Category: By 人生有夢,築夢踏實
Ref: 每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)

我一直以為Unicode 一定是二個位元組 (Byte)。UTF-8是指8位元,而UTF-16是指16位元.
答案是以上皆非。

初期,ASCII code的發展,僅定義了0x00到0x7F(也就是最高位元為0)。而0x80以後,任其發展,IBM-PC發展了OEM字元組,但在很多應用和地區,OEM字元組仍無法滿足,於是有很多人自行定義了自己的字元組。
後來,這段0x80~的模糊地帶,終於在ANSI標準中,有了答案。在ANSI標準中,定義了頁碼 (code page)。不同區域或系統給予一個頁碼。
例如:
日本:Locale=japanese / codepage = 932。
繁中(中華民國):locale=cht / codepage = 950。
簡中(PRC):locale=chs / codepage = 936。
USA:locale=american / codepage = 650001。 Ref: Unicode

但雖然有了上百種頁碼,而0x00~0x7F的字元組都是一樣的(基本上和ASCII一致)。而0x80~ 由各頁碼自行定義自己的字元組。但是,許多亞洲國家,256個字元根本不夠用;於是,通常是用一種叫DBCS(Double Byte Character Set)的系統來處理,但相容性很差。於是,接著發明了Unicode。

Unicode的表示方法:以 u+0041來表示'A' (Ascii:0x41).

Unicode編碼,剛開始的構想是以二個位元組來儲放,但是會浪費空間(尤其是英文系統),於是有了提出了UTF-8,當少於0x7F,以一個位元組來儲存,而其它以二個位元組來儲存。



最後,截錄作者的一段文章作結束。並感謝作者無私的分享。

--------------------

我們公司有出一套網站管理軟體CityDesk,從上一版起我們決定內部全部使用UCS-2(2個位元組)的Unicode,它也是Visual Basic、COM、以及Windows NT/2000/XP的標準字串型別。寫C++程式時只要在字串宣告時用wchar_t("wide char")代替char,再用wcs函數代替str函數(比如用wcscatwcslen代替strcatstrlen)即可。要在C程式裡建立一個UCS-2字串常數,只要在字串前面加個L就好了,就是這樣:L"Hello".
--------------------


 

0 comments so far.

Something to say?

ARCHIVES