Linux Unicode 編程

如何(在程序中)加入并使用 Unicode 以實(shí)現(xiàn)外語支持

developerWorks
文檔選項(xiàng)
將此頁作為電子郵件發(fā)送

將此頁作為電子郵件發(fā)送

未顯示需要 JavaScript 的文檔選項(xiàng)



級別: 初級

Thomas W. Burger (twburger@bigfoot.com)Thomas Wolfgang Burger Consulting 的老板

2001 年 8 月 01 日

作為一個(gè)計(jì)算機(jī)的多位字符表示系統(tǒng),Unicode 支持世界上所有語言的編碼和轉(zhuǎn)換。這篇文章說明了 Linux 應(yīng)用程序中的國際語言支持的重要性,以及規(guī)劃 Unicode 支持并將之結(jié)合到 Linux 應(yīng)用程序中去的思想。

Unicode 并不只是一個(gè)編程工具,它還是一個(gè)政治的、經(jīng)濟(jì)的工具。沒有結(jié)合世界的語言支持的應(yīng)用程序通常只能被那些能讀寫 ASCII 所支持語言的個(gè)人使用。這使得建立在 ASCII 基礎(chǔ)之上的計(jì)算機(jī)技術(shù)脫離了世界上大部分人。Unicode 允許程序使用世界上任何一種字符集,因此它支持所有語言。

Unicode 讓程序員為普通人提供用他們本國語言就能使用的軟件。這樣就不用再學(xué)一門外語了,而且更容易實(shí)現(xiàn)計(jì)算機(jī)技術(shù)社會(huì)和財(cái)政上的利益。很容易設(shè)想,如果用戶必須為使用因特網(wǎng)瀏覽器而學(xué)習(xí)烏爾都語的話,您就難以看到計(jì)算機(jī)在美國的使用。Web 就更不會(huì)出現(xiàn)了。

Linux 承擔(dān)了對 Unicode 很大程度上的支持。Unicode 支持被嵌入到內(nèi)核和代碼開發(fā)庫中。在很大程度上,使用程序中幾句簡單的命令就能將它們自動(dòng)的結(jié)合到代碼中。

所有現(xiàn)代字符集的基礎(chǔ)都是在 1968 年以 ANSIX3.4 版本出版的美國信息交換標(biāo)準(zhǔn)碼(American Standard Code for Information Interchange,ASCII)。一個(gè)值得注意的例外是在 ASCII 之前定義的 IBM 的擴(kuò)充的二進(jìn)制編碼的十進(jìn)制交換碼(Extended Binary Coded Decimal Information Code,EBCDIC)。ASCII 是一個(gè)編碼字符集(coded character set,CCS),換句話說,它是整數(shù)到字符表示的映射。ASCII 編碼字符集允許用一個(gè)八位(基于二進(jìn)制的,用值 0 或 1 表示的)字段或字節(jié)(2^8 =256)表示 256 個(gè)字符。這是一個(gè)高度受限的編碼字符集,它不能表示許多不同語言的所有字符(如中文和日文),不能表示科學(xué)符號,更不能表示古代文字(神秘符號和象形文字)和音樂符號。通過更改一個(gè)字節(jié)的長度而使更大的字符集得以被編碼,這似乎有效但完全不切實(shí)際。所有的計(jì)算機(jī)都基于八位字節(jié)。解決方法是一種字符編碼方案(Character encoding scheme,CES)― 用定長或變長的多字節(jié)序列能夠表示比 256 大的數(shù).這些數(shù)值接著通過編碼字符集被映射到它們表示的字符。

Unicode 的定義

Unicode 通常用作涉及雙字節(jié)字符編碼方案的通用術(shù)語。Unicode CCS 3.1 的官方稱謂是 ISO10646-1 通用多八字節(jié)編碼字符集(Universal Multiple Octet Coded Character Set,UCS)。Unicode 3.1 版本添加了 44,946 個(gè)新的編碼字符。算上 Unicode 3.0 版本已經(jīng)存在的 49,194 個(gè)字符,共計(jì) 94,140 個(gè)。

Unicode 編碼字符集利用了一個(gè)由 128 個(gè)三維的組構(gòu)成的四維編碼空間。其中每個(gè)組包含 256 個(gè)二維平面。每個(gè)平面由 256 個(gè)一維的行組成,并且每個(gè)行有 256 個(gè)單元。每個(gè)單元在這個(gè)編碼空間內(nèi)對一個(gè)字符編碼,或者被聲明為未經(jīng)使用。這種編碼概念被稱為 UCS-4;四個(gè)八位元用來表示指定組、平面、行和單元的每個(gè)字符。

第一個(gè)平面(第 00 組的第 00 平面)是基本多語言平面(Basic Multilingual Plane,BMP)。BMP 按字母、音節(jié)、表意符號和各種符號及數(shù)字定義了常規(guī)使用的字符。后續(xù)的平面用于附加字符或其它還沒有發(fā)明的編碼實(shí)體。我們需要這完整的范圍去處理世界上的所有語言;特別是擁有將近 64,000 個(gè)字符的一些東亞語言。

BMP 被用作雙字節(jié)的編碼字符集,這種編碼字符集確定為 ISO 10646 UCS-2 格式。ISO 10646 UCS-2 就是指 Unicode(并且兩者相同)。BMP,像所有 UCS 平面那樣,包含了 256 行,其中每行包含 256 個(gè)單元,字符僅僅按照 BMP 中的行和單元的八位元在單元中被編碼。 這就允許 16 位編碼字符能夠被用來書寫大多數(shù)商業(yè)上最重要的語言。UCS-2 不需要代碼頁切換、代碼擴(kuò)展或代碼狀態(tài)。UCS-2 是一種將 Unicode 結(jié)合到軟件中的簡單方法,但它只限于支持 Unicode BMP。

若要用 8 位字節(jié)表示一個(gè)多于 2^8 =256 個(gè)字符的字符編碼系統(tǒng)(character coding system,CCS),就需要一種字符編碼方案(character-encoding scheme,CES)。





回頁首


Unicode 轉(zhuǎn)換

在 UNIX 中,使用得最多的字符編碼方案是 UTF-8。 它考慮到了對整個(gè) Unicode 全部頁和平面的全面支持,而且它仍能正確的識別 ASCII。除了 UTF-8 的其他選擇還有:UCS-4、UTF-16、UTF-7.5、UTF-7、SCSU、HTML 和 JAVA。

Unicode 轉(zhuǎn)換格式(Unicode Transformation Formats,UTFs)是一種通過映射多字節(jié)編碼中的值來支持 Unicode 的字符編碼方案。本文將分析最流行的格式 ― UTF-8 字符編碼系統(tǒng)。

UTF-8

UTF-8 轉(zhuǎn)換格式正逐步成為一種占主導(dǎo)地位的交換國際文本信息的方法,因?yàn)樗梢灾С质澜缟纤械恼Z言,而且它還與 ASCII 兼容。UTF-8 使用變長編碼。從 0 到 0x7f(127)的字符把自身編碼成單字節(jié),而將值更大的字符編碼成 2 到 6 個(gè)字節(jié)。

表 1. UTF-8 編碼

0x00000000 - 0x0000007F: 0 xxxxxxx
0x00000080 - 0x000007FF: 110 xxxxx10 xxxxxx
0x00000800 - 0x0000FFFF: 1110 xxxx10 xxxxxx10 xxxxxx
0x00010000 - 0x001FFFFF: 11110 xxx10 xxxxxx10 xxxxxx 10 xxxxxx
0x00200000 - 0x03FFFFFF: 111110 xx10 xxxxxx10 xxxxxx10 xxxxxx 10 xxxxxx
0x04000000 - 0x7FFFFFFF: 1111110 x10 xxxxxx10 xxxxxx10 xxxxxx 10 xxxxxx10 xxxxxx

字節(jié) 10 xxxxxx是一個(gè)擴(kuò)展字節(jié),它的 xxxxxx 位位置被以二進(jìn)制表示的字符代碼號的位所填充。這是能夠代表被使用代碼的最短的可能的多字節(jié)序列。

UTF-8 編碼示例

Unicode 字符版權(quán)標(biāo)記字符 0xA9 = 1010 1001 用 UTF-8 編碼如下所示:

11000010 10101001 = 0xC2 0xA9

“不等于”符號字符 0x2260 = 0010 0010 0110 0000 編碼如下所示:

11100010 10001001 10100000 = 0xE2 0x89 0xA0

通過獲取 continuation byte 的值可以看到原始數(shù)據(jù):

[1110]0010 [10]001001 [10]100000
0010 001001 100000
0010 0010 0110 0000 = 0x2260

第一個(gè)字節(jié)定義后面緊跟的八位元數(shù),如果是 7F 或更小,這就是等價(jià)的 ASCII 值。每個(gè)八位字節(jié)以 10 xxxxxx 開頭,確保字節(jié)不與 ASCII 的值混淆。





回頁首


UTF 支持

在 Linux 平臺上使用 UTF-8 之前,請確信分發(fā)包里有 glibc 2.2 和 XFree86 4.0 或更新的版本。早先的版本缺少 UTF-8 語言環(huán)境支持和 ISO10646-1 X11 字體。

在 UTF-8 發(fā)布之前,Linux 用戶使用各種不同特定語言的擴(kuò)展 ASCII,像歐洲用戶用 ISO 8859-1 或 ISO 8859-2,希臘用戶使用 ISO 8859-7,俄羅斯用戶使用 KOI-8 / ISO 8859-5/CP1251(西里爾字母)。這使得數(shù)據(jù)交換出現(xiàn)了很多問題,并且需要為這些編碼之間的差異編寫應(yīng)用軟件。這種語言支持是不完善的,而且數(shù)據(jù)交換沒有經(jīng)過測試。Linux 主要的發(fā)行商和應(yīng)用程序開發(fā)者正致力于讓主要以 UTF-8 格式表示的 Unicode 成為 Linux 中的標(biāo)準(zhǔn)。

為了識別 Unicode 文件,Microsoft 建議所有的 Unicode 文件應(yīng)該以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符開頭。這作為一個(gè)“特征符”或“字節(jié)順序標(biāo)記(byte-order mark,BOM)”來識別文件中使用的編碼和字節(jié)順序。但是,Linux/UNIX 并沒有使用 BOM,因?yàn)樗鼤?huì)破壞現(xiàn)有的 ASCII 文件的語法約定。在 POSIX 系統(tǒng)中,選中的語言環(huán)境識別了在一個(gè)過程中的所有輸入輸出文件期望的編碼形式。

有兩種方法可以將 UTF-8 支持添加到 Linux 應(yīng)用程序中。第一種方法,數(shù)據(jù)都以 UTF-8 形式存放在各處,這樣軟件改動(dòng)很少(被動(dòng)的)。另一種方法,被讀取的 UTF-8 數(shù)據(jù)用標(biāo)準(zhǔn)的 C 語言庫函數(shù)轉(zhuǎn)變成為寬字符數(shù)組(轉(zhuǎn)換的)。在輸出時(shí),用函數(shù) wcsrtombs() 使字符串被轉(zhuǎn)變回 UTF-8:


清單 1. wcsrtombs()
#include <wchar.h> 
size_t wcsrtombs (char *dest, const wchar_t **src, size_t len, mbstate_t *ps);

方法的選擇取決于應(yīng)用程序的性質(zhì)。大多數(shù)應(yīng)用程序可以使用被動(dòng)的方法操作。這就是在 UNIX 平臺上使用 UTF-8 會(huì)如此流行的原因。像 catecho 那樣的程序就不需要修改。字節(jié)流仍只是字節(jié)流,并沒有對它進(jìn)行任何處理。ASCII 字符和控制代碼在 UTF-8 語言環(huán)境中不改變。

通過字節(jié)計(jì)數(shù)對字符進(jìn)行計(jì)數(shù)的程序需要一些小小的改動(dòng)。在 UTF-8 中應(yīng)用程序不對任何擴(kuò)展的字節(jié)進(jìn)行計(jì)數(shù)。如果選擇了 UTF-8 語言環(huán)境,C 語言庫的 strlen(s) 函數(shù)需要用 mbstowcs() 函數(shù)來代替:


清單 2. mbstowcs() 函數(shù)
#include <stdlib.h>
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);

strlen 的一種常見用法是估算顯示寬度。中文和其它表意符號將占用兩列位置。 wcwidth() 函數(shù)用來測試每個(gè)字符的顯示寬度:


清單 3. wcwidth() 函數(shù)
#include <
        wchar.h> 
int wcwidth(wchar_t wc);
      





回頁首


Unicode 的 C 語言支持

在正式情況下,從 GNU glibc 2.2 開始,wchar_t 類型只為 32 位的 ISO 10646 格式數(shù)值所特定使用,與當(dāng)前使用的語言環(huán)境無關(guān)。通過 ISO C99 所要求的 __STDC_ISO_10646__ 宏的定義作為信號通知應(yīng)用程序。 __STDC_ISO_10646__ 的定義用來指出 wchar_t 是 Unicode。精確的值是一個(gè)十進(jìn)制的 yyyymmL 格式的常數(shù)。例如,使用:


清單 4. 指出 wchar_t 是 Unicode
#define __STDC_ISO_10646__ 200104L

是為指出 wchar_t 類型的值是由 ISO/IEC 10646 和到指定的年月為止的所有修正與技術(shù)勘誤定義的字符編碼表示。

對 wchar_t 的利用如這個(gè)示例所示,使用宏確定在 ISO C99 可移植代碼中寫雙引號的方法。


清單 5. 確定寫雙引號的方法
#if __STDC_ISO_10646__  
   printf("%lc", 0x201c);  
#else  
   putchar('"');  
#fi

語言環(huán)境

激活 UTF-8 的恰當(dāng)?shù)霓k法是 POSIX 語言環(huán)境機(jī)制。語言環(huán)境是一種包含有關(guān)軟件行為特定文化約定的配置設(shè)定。它包含了字符編碼、日期/時(shí)間符號、分類規(guī)則以及度量系統(tǒng)。語言環(huán)境的名稱通常由 ISO 639-1 語言、ISO 3166-1 國家或地區(qū)代碼以及可選的編碼名稱和其它限定符組成。您可以用命令 locale -a 獲取所有安裝在系統(tǒng)上的語言環(huán)境列表(通常在 /usr/lib/locale/)。

如果沒有預(yù)安裝 UTF-8 語言環(huán)境,你可以用 localedef 命令生成它。若要為某個(gè)特定用戶生成并激活一個(gè)德語的 UTF-8 語言環(huán)境,請使用如下語句:


清單 6. 為特定用戶生成語言環(huán)境
localedef -v -c -i de_DE -f UTF-8 $HOME/local/locale/de_DE.UTF-8
export LOCPATH=$HOME/local/locale
export LANG=de_DE.UTF-8

有時(shí)候?yàn)樗杏脩籼砑?UTF-8 語言環(huán)境會(huì)很有用。root 用戶使用如下指令就可以完成:


清單 7. 為每個(gè)用戶生成語言環(huán)境
localedef -v -c -i de_DE -f UTF-8 /usr/share/locale/de_DE.UTF-8

若要為每個(gè)用戶將這個(gè)語言環(huán)境設(shè)為缺省值,可以將以下行添加到 /etc/profile 文件中:


清單 8. 為所有用戶設(shè)置缺省的語言環(huán)境
export LANG=de_DE.UTF-8

處理多字節(jié)字符代碼序列的函數(shù)行為依賴于當(dāng)前語言環(huán)境的 LC_CTYPE 類別;它確定了依賴語言環(huán)境的多字節(jié)編碼。值 LANG=de_DE(德語)會(huì)導(dǎo)致輸出按 ISO 8859-1 被格式化。值 LANG=de_DE.UTF-8 會(huì)把輸出格式化成 UTF-8。語言環(huán)境設(shè)置會(huì)導(dǎo)致 printf 中的 %ls 格式說明符調(diào)用 wcsrtombs() 函數(shù)以便于將寬字符的參數(shù)字符串轉(zhuǎn)換成依賴語言環(huán)境的多字節(jié)編碼。語言環(huán)境中的國家或地區(qū)標(biāo)識符如:LC_CTYPE= en_GB (英國英語)和 LC_CTYPE= en_AU(澳大利亞英語),它們之間的差異只在 LC_MONETARY 類別中,原因在于貨幣的名稱和打印貨幣數(shù)量的規(guī)則不同。

請給您首選的語言環(huán)境設(shè)置環(huán)境變量 LANG。當(dāng)一個(gè) C 程序執(zhí)行 setlocale() 函數(shù)時(shí):


清單 9. setlocale() 函數(shù)
#include <stdio.h>
#include <locale.h>
//char *setlocale(int category, const char *locale);
int main()
{
  if (!setlocale(LC_CTYPE, "")) 
  {
    fprintf(stderr, "Locale not specified. Check LANG, LC_CTYPE, LC_ALL.
");
    return 1;
  }

C 語言庫將會(huì)依次測試環(huán)境變量 LC_ALL、LC_CTYPE 和 LANG。其中第一個(gè)含值的環(huán)境變量將決定為 LC_CTYPE 類別裝入哪種語言環(huán)境數(shù)據(jù)。語言環(huán)境數(shù)據(jù)分裂成獨(dú)立的類別。值 LC_CTYPE 定義了字符編碼,而 LC_COLLATE 定義了排序順序。我們用 LANG 環(huán)境變量為所有類別設(shè)置缺省語言環(huán)境,但 LC_* 變量可以用來覆蓋單個(gè)類別。

您可以用命令 locale charmap 查詢當(dāng)前語言環(huán)境中字符編碼的名稱。如果您從 LC_CTYPE 類別中成功選取了 UTF-8 語言環(huán)境,會(huì)輸出 UTF-8。命令 locale -m 提供一張已安裝的所有字符編碼名稱的列表。

如果您使用專門的 C 語言庫的多字節(jié)函數(shù)來完成所有外部字符編碼和內(nèi)部使用的 wchar_t 編碼之間的轉(zhuǎn)換,那么 C 語言庫將承擔(dān)責(zé)任,根據(jù) LC_CTYPE 使用正確的編碼方式。這甚至不需要程序被明確的編碼成當(dāng)前的多字節(jié)編碼。

如果需要一個(gè)應(yīng)用程序能明確的支持 UTF-8(或其它編碼)轉(zhuǎn)換方法而不用 libc 多字節(jié)函數(shù),則應(yīng)用程序必須確定是否需要激活 UTF-8 模式。帶有 <langinfo.h> 庫頭文件的與 X/Open 兼容系統(tǒng)可以用如下代碼:


清單 10. 檢測當(dāng)前的語言環(huán)境是否使用了 UTF-8 編碼
BOOL utf8_mode = FALSE;
if( !  strcmp(nl_langinfo(CODESET), "UTF-8")
   utf8_mode = TRUE;

為檢測當(dāng)前語言環(huán)境是否使用了 UTF-8 編碼。首先必須調(diào)用 setlocale(LC_CTYPE, "") 函數(shù),依據(jù)環(huán)境變量設(shè)置語言環(huán)境。nl_langinfo(CODESET) 函數(shù)也是由 locale charmap 命令調(diào)用,從而查找當(dāng)前語言環(huán)境指定的編碼名稱。

另一種可以使用的方法是查詢語言環(huán)境變量:


清單 11. 查詢語言環(huán)境變量
char *s;
BOOL utf8_mode = FALSE;
if ((s = getenv("LC_ALL")) || (s = getenv("LC_CTYPE")) || (s = getenv ("LANG"))) 
{
   if (strstr(s, "UTF-8"))
      utf8_mode = TRUE;
}

這項(xiàng)測試假設(shè) UTF-8 語言環(huán)境名稱中有值“UTF-8”,但實(shí)際情況并不總是如此,所以應(yīng)該使用 nl_langinfo() 方法。





回頁首


總結(jié)

為支持世界上的所有語言,需要一種具有八位字節(jié)字符編碼策略的字符編碼系統(tǒng),它的字符應(yīng)多于 ASCII(一種使用無符號字節(jié)的擴(kuò)展版本)的 2^8 = 256 個(gè)字符。Unicode 就是這樣一種字符編碼系統(tǒng),它具有由 128 個(gè)三維組(帶有由大量字符編碼方案的方法支持的 94,140 個(gè)定義好的字符值)組成的四維編碼空間,在 Linux 中更流行的字符編碼方案是 Unicode 轉(zhuǎn)換格式 UTF-8。



參考資料

  • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文.

  • 請?jiān)L問 Unicode 聯(lián)盟的 Unicode 主頁,這里定義了 Unicode 字符之間的行為和關(guān)系,并為實(shí)現(xiàn)者提供了技術(shù)信息。

  • 國際標(biāo)準(zhǔn)組織(International Organization for Standardization,ISO) 是一個(gè)由 140 個(gè)國家組成的全球性的國家標(biāo)準(zhǔn)社團(tuán)聯(lián)盟。

  • ANSI 是個(gè)私有的、非營利組織,它管理并調(diào)整 U.S. 的志愿標(biāo)準(zhǔn)化以及一致性評價(jià)系統(tǒng)。

  • ISO C99 Draft (Acrobat PDF 格式,556 頁),是新的 C 語言標(biāo)準(zhǔn),來自 Calgary 大學(xué) Ben 的 C 編程課程。

  • 請閱讀 Roman Czyborra 的 Unix 環(huán)境下的 Unicode。

  • 請閱讀 IANA(Internet Assigned Numbers Authority)中的 IANA Charset Registration Procedures。

  • 請參閱 Virginia 大學(xué)圖書館 Robertson Media 中心的 Unicode Music Symbols。

  • 請看看 graphic representation of the Roadmap to the BMP, Plane 0 of the UCS。這些表包含了由 0 號,也就是通用字符集(Universal Character Set,UCS)的基本多語言平面(Basic Multilingual Plane,BMP)實(shí)際大小的映射組成的。Everson Gunn Teoranta 是一個(gè)自 1990 年開辦的支持少數(shù)民族語言團(tuán)體的軟件和出版公司,由 Michael Everson 和 Marion Gunn 共同建立。

  • 請瀏覽 UTF-8 and Unicode FAQ for UNIX/Linux,Markus Kuhn 的綜合性的 one-stop 信息資源,關(guān)于您如何在 POSIX 系統(tǒng)(Linux,UNIX)使用 Unicode/UTF-8。

  • 請檢查 Technology Appraisals Ltd 的 Solution Given by the Universal Character Set,其中提供了獨(dú)立的、高質(zhì)量的有關(guān)電子商務(wù)系統(tǒng)、電子信息傳遞、XML、網(wǎng)絡(luò)和 IT 安全的信息、教育和培訓(xùn)。

  • 請閱讀 Mulberry Technologies, Inc 的 Unicode presentation titled“10646 and All That”,一個(gè)專攻基于 SGML 和 XML 系統(tǒng)的電子出版物的咨詢公司。

  • 請咨詢 Linux 程序員手冊上的 UTF-8 ― an ASCII compatible multi-byte Unicode encoding。

  • 請閱讀 Unicode Standard Annex#15 Unicode Normalization Forms,一篇描寫了四種 Unicode 文本標(biāo)準(zhǔn)化格式規(guī)范的文檔。有了這些格式,等價(jià)的(規(guī)范或是兼容的)文本將會(huì)有同樣的二進(jìn)制表式。當(dāng)實(shí)現(xiàn)工具在標(biāo)準(zhǔn)化的格式中保留了一個(gè)字符串,可以確保有一個(gè)以二進(jìn)制形式表現(xiàn)的獨(dú)一無二的等價(jià)字符串。

  • 請閱讀 man-pages.net 上的 mbstowcs,它把多字節(jié)字符串轉(zhuǎn)換成了寬字符的字符串,man-pages.net 為 Linux 手冊頁面提供了永久的基于 Web 的歸檔文件。

  • 請閱讀 Hewlett Packard 的開發(fā)者資源站點(diǎn)的 Linux 程序員手冊上的 wcsrtombs,它能將寬字符的字符串轉(zhuǎn)化為多字節(jié)字符串。

  • 請閱讀 MKS 工具箱文檔中的 setlocale(),它能改變或查詢語言環(huán)境。MKS 軟件公司是在 Windows 環(huán)境或混合 UNIX/Linux 和 Windows 環(huán)境中用于系統(tǒng)管理和開發(fā)的 Windows 自動(dòng)化工具的領(lǐng)先供應(yīng)商。

  • 請學(xué)習(xí) IBM Classes for Unicode (ICU),一個(gè) C 語言和 C++ 語言庫,它在許多平臺上提供了健壯的和功能完善的 Unicode 支持。

  • 請參閱 IBM 的 “Introduction to Unicode”站點(diǎn),這里深入涵蓋了 Unicode 基礎(chǔ)知識。

  • 在 IBM 的關(guān)于新興技術(shù)的 alphaWorks站點(diǎn) 。請參閱:
    • UnicodeCompressor,這里提供了使用標(biāo)準(zhǔn) Unicode 壓縮方案的壓縮和解壓縮 Unicode 文本的工具
    • Unicode Normalizer,為實(shí)現(xiàn)快速排序和搜索將 Java 字符串對象轉(zhuǎn)換為標(biāo)準(zhǔn) Unicode 格式。

  • 請閱讀 TW Burger 撰寫的 “Cyrillic in Unicode”和 Jim Melnick 撰寫的 “Multilingual forms in Unicode”,也在 developerWorks上。

  • 請?jiān)?developerWorks上瀏覽 更多 Linux 參考資料。


關(guān)于作者

TW Burger 從 1979 年起曾經(jīng)做過編程、講授中等計(jì)算機(jī)課程以及撰寫有關(guān)計(jì)算機(jī)技術(shù)方面的書。他正在經(jīng)營一個(gè)信息技術(shù)咨詢公司。您可以通過 twburger@bigfoot.com 與他聯(lián)系。