共用方式為


代碼頁

目前撰寫的大部分應用程式會處理字元數據,主要是使用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 字元集。 程序代碼值0x00到0x19和0x7F一律代表標準化的控制字元,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 和多位元組字元集代碼頁同樣正常運作。

注意

WideCharToMultiByte 如果提供的代碼頁不能代表 Unicode 字串中的所有字元,可能會遺失某些數據。

 

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

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

字元集