字碼頁

目前撰寫的大部分應用程式主要會使用 UTF-16 編碼來處理字元資料做為 Unicode。 不過,許多繼承應用程式會繼續根據字碼頁使用字元集。 即使是新的應用程式有時都必須使用字碼頁,通常有下列其中一個原因:

  • 若要與繼承應用程式通訊。
  • 若要與較舊的郵件和新聞伺服器通訊,可能不一定支援 Unicode。
  • 為了舊版用途與 Windows 主控台通訊。 (主控台確實支援 Unicode,但某些舊版命令列應用程式工具可能不支援。)

注意

新的 Windows 應用程式應該使用 Unicode 來避免不同字碼頁的不一致,並方便當地語系化。

 

每個字碼頁都是以字碼頁識別碼來表示,例如 1252,並由 Unicode 和字元集 API 函式處理。 如需支援的字碼頁識別碼清單,請參閱 字碼頁識別碼。 Microsoft Go 全域開發人員中心 上的「字碼頁」參考提供許多字碼頁的完整描述。

Windows 字碼頁通常稱為「ANSI 字碼頁」,是非 ASCII 值 (大於 127) 代表國際字元的字碼頁。 這些字碼頁會在 Windows Me 中以原生方式使用,也可以在Windows NT和更新版本上使用。

注意

最初,Windows 字碼頁 1252 是用於英文和其他西歐語言的字碼頁,是以美國國家標準局 (ANSI) 草稿為基礎。 該草稿最終會變成 ISO 8859-1,但 Windows 字碼頁 1252 是在標準變成最終之前實作,且與 ISO 8859-1 不完全相同。

 

許多 Windows API 函式都有 「A」 (ANSI) 和 「W」 (寬、Unicode) 版本。 「A」 版本會根據 Windows 字碼頁處理文字,而 「W」 版本會處理 Unicode 文字。 請參閱函式原型的字串和慣例的Windows 資料類型

Windows 字碼頁有時也稱為「使用中字碼頁」或「系統使用中字碼頁」。 Windows 作業系統一律有一個目前作用中的 Windows 字碼頁。 所有 ANSI 版本的 API 函 式都會使用目前使用中的字碼頁。

原始設備製造商 (OEM) 字碼頁是非 ASCII 值代表線條繪圖和標點符號字元的字碼頁。 這些字碼頁原本是用於 MS-DOS,但仍用於主控台應用程式。 它們也會用於 FAT12、FAT16 和 FAT32 檔案系統中的非擴充檔案名,如 檔案名中使用的字元集中所述。 英文的一般 OEM 字碼頁是字碼頁 437。

針對 Windows 字碼頁和 OEM 字碼頁,程式碼值0x00透過 0x7F對應至 7 位 ASCII 字元集。 透過0x19和0x7F的程式碼 0x00值一律代表標準化的控制字元,0x20 0x7E代表標準化的可顯示字元。 其餘程式碼所代表的字元,0x80到0xff,會因字元集而異。 每個字元集都包含不同的特殊字元,通常是針對語言或語言群組自訂。 Windows 字碼頁 1252 和 OEM 字碼頁 437 通常用於美國。

除了 Windows 和 OEM 字碼頁,您的應用程式也可以使用非原生字碼頁。 例如 EBCDIC 和 Macintosh 字碼頁。

Unicode (UTF-7 和 UTF-8) 的兩種編碼方式會實作為字碼頁。 就像其他字碼頁一樣,每個頁面都是由數值識別碼所知道,而且可以使用許多相同的 Unicode 和字元集 API 函式來處理。

字碼頁可以是 單位元組字元集 (SBCS) 分頁,也可以是 DBCS) 分頁 (雙位元組字元集 。 在 SBCS 頁面中,每個位元組都會直接編碼單一字元,因此可以只代表 256 個不同的字元 (包括控制字元、字母、數位、標點符號、符號等) 。 DBCS 字碼頁用於日文和中文等語言。 在這類字碼頁中,某些字元具有具有特定位元組值的雙位元組編碼, (一律大於 127) 做為「前置位元組」的值。 前置位元組只能與「尾端位元組」一起對應至字元,而不是自行編碼字元。

某些舊版通訊協定需要使用 SBCS 和 DBCS 字碼頁。 每個 SBCS/DBCS 字碼頁都支援不同的字元,但沒有字碼頁支援 Unicode 提供的完整字元範圍。 每個 SBCS/DBCS 字碼頁都支援不同編碼的不同子集。

注意

從一個 SBCS 或 DBCS 字碼頁轉換成另一個字碼頁的資料可能會損毀,因為不同字碼頁上的相同資料值可以編碼不同的字元。 從 Unicode 轉換成 SBCS 或 DBCS 的資料會受限於資料遺失,因為指定的字碼頁可能無法代表該特定 Unicode 資料中使用的每一個字元。

 

除了 SBCS 和 DBCS 字碼頁,您的應用程式還提供多位元組字元集字碼頁 52936、54936、51949 和 5022x,其使用與 DBCS 類似的方法。 不過,多位元組字元集字碼頁超出某些字元的雙位元組編碼。 UTF-7 和 UTF-8 使用類似的方法來分別根據 7 位和 8 位位元組編碼 Unicode。 如需詳細資訊,請參閱 Unicode

數個 Unicode 和字元集函式可讓您的應用程式處理字碼頁。 應用程式可以使用 GetCPInfoGetCPInfoEx 函式來取得字碼頁的相關資訊。 這項資訊包含當轉換字串中的字元在字碼頁中沒有對應專案時所使用的預設字元。

應用程式可以使用 MultiByteToWideCharWideCharToMultiByte 函式,根據 Windows 字碼頁和 Unicode 字串在字串之間轉換。 雖然這些函式的名稱是指 「MultiByte」,但這些函式與 SBCS、DBCS 和多位元組字元集字碼頁的運作方式相同。

注意

如果提供的字碼頁無法代表 Unicode 字串中的所有字元,WideCharToMultiByte可能會遺失一些資料。

 

您的應用程式可以使用標準 C 執行時間程式庫函式,在 Windows 字碼頁和 OEM 字碼頁之間轉換。 不過,使用這些函式會導致資料遺失的風險,因為每個字碼頁可以表示的字元不完全相符。

您的應用程式也可以呼叫 GetACP 函式。 此函式會擷取目前 Windows (ANSI) 字碼頁的識別碼。

字元集