Unicode
- 6. Before Unicode
BIG5 碼系統為兩位元組之內碼系統,共可定義
19782 個字碼,其高、低位元組的範圍如下:
• 高位元組 0x81~0xFE
• 低位元組 0x40~0x7E、0xA1-0xFE
其第一位元組的值在 16 進制的 A1~FE 之間, 第
二位元組在 40~7E 和 A1~FE 之間。因此,其
第一位元組的最高位元是 1, 第二位元組的最高
位元可能是 1,也可能是 0。Big5 在上述範圍
內,規劃出標準字(STDFONT)、特殊符號
(SPCFONT、SPCFSUPP)及使用者造字
(USRFONT)的區域。
- 7. Before Unicode
BIG5 的 Unicode 補完計畫
• Unicode補完計畫只是補字,並沒有解決亂
碼、字碼不足的問題。
• 字碼並不完全與 Unicode 相同,因此,在
使用了補完計畫裡的某個字以後,在其他
人電腦上不一定能看到,必須對方也安裝
補完計畫才行。
- 23. 程式設計
字元、字串的表示
• ASCII: char s[]=“Hello world!”;char c=‘c’;
• Unicode: wchar_t s[]=L”Hello world!”;
wchar_t c=L’c’;
• Windows: TCHAR s[]=TEXT(“Hello
world!”); TCHAR c=_T(‘c’);// 或使用 _T()
替代 TEXT()
- 24. 程式設計
字串處理
• ASCII (char):strcpy(), strcat(),
strcmp()…
• Unicode (wchar):wcscpy(), wcscat(),
wcscmp()…
• Windows:可使用 TCHAR 並定義
_MBCS或_UNICODE表明使用 double
byte 或 unicode,然後調用 _tcscpy(),
_tcscat(), _tcscmp() ….
- 25. 程式設計
輸入、輸出
• ASCII:printf(), scanf(), fwprintf()…
• Unicode: wprintf(), wscanf(), fwscanf()…
• Windows: _tfprintf(), _tscanf(), _tfprintf()…
使用前,同樣也要 #define _UNICODE、
#define UNICODE
- 26. 程式設計
資料庫
• MS SQL: nvarchar, nchar
• MySQL: 建立 Database、Table 與連線時
就需要指定使用編碼
• SQLLite: Unicode base
- 28. 程式設計
• 編碼自動偵測
– 文字檔 (BOM): UTF-16(LE) FF FE、UTF-8 EF BB
BF…
– html/xml
• 可能做到嗎?你已經在使用了,大多的Browser
都提供了此功能。
• Mozilla 有開源此函式庫:Mozilla Charset
Detectors
http://www.mozilla.org/projects/intl/chardet.html
• enca (http://trific.ath.cx/)
- 32. 參考資料
•
•
•
•
•
•
•
•
•
•
ASCII - Wikipedia http://zh.wikipedia.org/wiki/ascii
由方方土探討Big5e http://netlab.cse.yzu.edu.tw/~statue/freebsd/hanzi/examp/
关于GB编码的一些常识 - 字符编码
http://blog.chinaunix.net/u2/66172/showart_557975.html
Unicode補完計畫 – Wikipedia
http://zh.wikipedia.org/wiki/Unicode%E8%A3%9C%E5%AE%8C%E8%A8%88%E7%
95%AB
Unicode與ISO10646(上)(作者:曾士熊)
http://www.ascc.sinica.edu.tw/nl/89/1610/02.txt
Unicode與ISO10646(下)(作者:曾士熊)
http://www.ascc.sinica.edu.tw/nl/89/1611/02.txt
UTF-16 - Wikipedia http://zh.wikipedia.org/wiki/UTF-16
RFC 2781 - UTF-16, an encoding of ISO 10646 http://tools.ietf.org/html/rfc2781
谈谈Windows程序中的字符编码(1) >>> 致力于编码技术发展
http://www.utf.com.cn/article/s13
ruby character encoding detection http://blogger.godfat.org/2008/06/rubycharacter-encoding-detection.html
- 33. 參考資料
•
•
•
•
親手打造 GNU/Linux 中文環境 (五) - 訊息國際化的解決方案 (gettext 簡介)
http://cle.linux.org.tw/xcin/i18n/pc2000/p5/index.html
Byte-order mark
http://en.wikipedia.org/wiki/Byte_Order_Mark#Representations_of_byte_order_marks
_by_encoding
ANSI C X3.159-89 標準 http://phi.sinica.edu.tw/aspac/reports/95/95002/appendixa.html
setlocale, _wsetlocale (CRT) http://msdn.microsoft.com/enus/library/x99tb11d(VS.80).aspx