Unicode
Unicode 是全球字元編碼標準。 系統會獨佔使用 Unicode 進行字元和字串操作。 如需 Unicode 所有層面的詳細描述,請參閱 Unicode 標準。
相較于處理字元和字串資料的較舊機制,Unicode 可簡化軟體當地語系化,並改善多語系文字處理。 藉由使用 Unicode 來代表應用程式中的字元和字串資料,您可以啟用全域行銷的通用資料交換功能,針對每個可能的字元碼使用單一二進位檔案。 Unicode 會執行下列動作:
- 允許從任何腳本和語言組合繪製的字元組合,以並存于單一檔中。
- 定義每個字元的語意。
- 標準化腳本行為。
- 提供雙向文字的標準演算法。
- 定義與其他標準的交叉對應。
- 定義其單一字元集的多個編碼:UTF-7、UTF-8、UTF-16 和 UTF-32。 這些編碼之間的資料轉換是無損失的。
Unicode 支援世界各地的語言所使用的許多腳本,以及用於發行的大量技術符號和特殊字元。 支援的腳本包括但不限於拉丁文、希臘文、斯拉夫文、希伯來文、阿拉伯文、Devanagari、泰文、漢字、韓文、平假名和片假名。 支援的語言包括但不限於德文、法文、英文、希臘文、俄文、希伯來文、阿拉伯文、印度文、泰文、中文、韓文和日文。 Unicode 目前可代表世界各地的現代電腦中大部分字元,並持續更新,使其更完整。
啟用 Unicode 的函式會在 函式原型的慣例中說明。 這些函式使用 UTF-16 (寬字元) 編碼,這是最常見的 Unicode 編碼方式,以及用於 Windows 作業系統上原生 Unicode 編碼的編碼方式。 每個程式碼值寬為 16 位,相較于使用 8 位程式碼值的舊 版字碼頁 方法字元和字串資料。 使用 16 位允許直接編碼 65,536 個字元。 事實上,用來轉譯人類語言的符號宇宙甚至大於此範圍,而 U+D800 到 U+DFFF 範圍中的 UTF-16 字碼點則用來形成 Surrogate 字組,構成 32 位的補充字元編碼。 如需進一步的討論 ,請參閱 Surrogates 和增補字元 。
Unicode 字元集包含許多合併字元,例如 U+0308 (「 」 ) 、合併的 dieresis 或 umlaut。 Unicode 通常可以在 ''compososed'' 或 ''decomposed'' 表單中代表相同的圖像:例如,「Ä」 的組成形式是單一 Unicode 字碼指標 「Ä」 (U+00C4) ,而其分解表單是 「A」 + 「ー」 (U+0041 U+0308) 。 Unicode 不會為每個字元定義組成表單。 例如,越南小寫 「o」 含圓角和波浪 (「ỗ」) 以 U+006f U+0302 U+0303 (o + Lowerflex + Tilde) 表示。 如需合併字元和相關問題的進一步討論,請參閱 使用 Unicode 正規化來代表字串。
為了與 8 位和 7 位環境相容,Unicode 也可以分別編碼為 UTF-8 和 UTF-7。 雖然 Windows 中啟用 Unicode 的函式使用 UTF-16,但也可以使用以 UTF-8 或 UTF-7 編碼的資料,在 Windows 中以多位元組字元集 字碼頁的形式支援。
新的 Windows 應用程式應該使用 UTF-16 作為其內部資料標記法。 Windows 也提供對字碼頁的廣泛支援,而且可以在相同的應用程式中混合使用。 甚至新的 Unicode 型應用程式有時都必須使用字碼頁。 這在 字碼頁中討論的原因。
應用程式可以使用 MultiByteToWideChar 和 WideCharToMultiByte 函式,根據字碼頁和 Unicode 字串在字串之間轉換。 雖然它們的名稱是指 「MultiByte」,但這些函式與 單一位元組字元集 (SBCS) 、 雙位元組字元集 (DBCS) ,以及 (MBCS) 字碼頁的多位元組字元集相同。
一般而言,Windows 應用程式應該在內部使用 UTF-16,只在必須使用其他格式的介面上,將 它轉換成「精簡層」的一部分。 這項技術可防止資料遺失和損毀。 每個字碼頁都支援不同的字元,但其中都不支援 Unicode 提供的完整字元範圍。 大部分的字碼頁都支援不同的子集,以不同的編碼方式。 UTF-8 和 UTF-7 的字碼頁是例外狀況,因為它們支援完整的 Unicode 字元集,而且這些編碼與 UTF-16 之間的轉換是無損失的。
從某一個字碼頁所使用的編碼直接轉換成另一個字碼頁所使用的編碼資料會受到損毀的影響,因為不同字碼頁上的相同資料值可以編碼不同的字元。 即使您的應用程式盡可能接近介面進行轉換,您也應該仔細考慮要處理的資料範圍。
從 Unicode 轉換成字碼頁的資料會受限於資料遺失,因為指定的字碼頁可能無法代表該特定 Unicode 資料中使用的每一個字元。 因此請注意,如果目標字碼頁無法代表 Unicode 字串中的所有字元, WideCharToMultiByte 可能會遺失一些資料。
將字碼頁型繼承應用程式現代化以使用 Unicode 時,您可以使用泛型函式和 TEXT 宏來維護一組來源,以便編譯應用程式的兩個版本。 一個版本支援 Unicode,另一個版本則適用于 Windows 字碼頁。 使用這個機制,您甚至可以將非常大型的應用程式從 Windows 字碼頁轉換成 Unicode,同時維護可在轉換的所有階段編譯、建置及測試的應用程式來源。 如需詳細資訊,請參閱 函式原型的慣例。
Unicode 字元和字串會使用與字碼頁型字元和字串不同的資料類型。 除了一系列的宏和命名慣例之外,這項區別可將不小心混用這兩種字元資料類型的機會降到最低。 它有助於編譯器類型檢查,以確保只有 Unicode 參數值會搭配預期 Unicode 字串的函式使用。