首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

簡體中文與繁體中文編碼轉換完全指南:GBK、Big5、Unicode 互轉實戰

     編輯:關於C語言

中文編碼體系概覽

大陸常見編碼標準

  • GB2312(1980):收錄 7445 字符(含 6763 漢字),雙字節編碼,高字節 B0-F7,低字節 A1-FE。Windows 下代碼頁為 CP936。
  • GBK:微軟對 GB2312 的擴展(CP936 擴展),Windows 95 簡體版首現,後被列為國家技術規範指導性文件,非強制標準。兼容 GB2312,支援更多漢字及符號。
  • GB18030(2000):取代 GBK 1.0 的強制國家標準,收錄 27484 漢字及少數民族文字。PC 平台強制支援,嵌入式產品暫不強制(手機、MP3 多仍僅支援 GB2312)。

ANSI 編碼與系統代碼頁

「ANSI 編碼」泛指基於 ASCII 擴展的編碼體系。不同語系系統下的 ANSI 含義不同:英文系統為 ASCII,繁體中文為 Big5,日文為 Shift_JIS,簡體中文 Windows 預設代碼頁為 GBK。許多文本編輯器(如 EditPlus、記事本)預設以「ANSI」儲存,實際編碼取決於系統當前代碼頁。

Windows API 實現簡繁轉換(GBK 內部映射)

大多數情況下,簡繁轉換屬於 GBK 字符集內部的字形映射。Windows 提供 LCMapString API 實現:

// 簡體 → 繁體
LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, ...)

// 繁體 → 簡體
LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, ...)

參數說明請參閱 MSDN 文檔。

GBK 與 Big5 互轉:跨字符集轉換

Big5(代碼頁 950)通行於台灣、香港。GBK 與 Big5 無直接映射關係,需透過 Unicode 作為中介:
GBK ↔ Unicode ↔ Big5

核心 API:MultiByteToWideChar / WideCharToMultiByte

// GBK → Big5
int wcsLen = MultiByteToWideChar(CP_ACP, 0, szBuf, -1, NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen];
MultiByteToWideChar(CP_ACP, 0, szBuf, -1, wszString, wcsLen);
int ansiLen = WideCharToMultiByte(950, 0, wszString, -1, NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen];
WideCharToMultiByte(950, 0, wszString, -1, szAnsi, ansiLen, NULL, NULL);

// Big5 → GBK
int wcsLen = MultiByteToWideChar(950, 0, szBuf, -1, NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen];
MultiByteToWideChar(950, 0, szBuf, -1, wszString, wcsLen);
int ansiLen = WideCharToMultiByte(CP_ACP, 0, wszString, -1, NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen];
WideCharToMultiByte(CP_ACP, 0, wszString, -1, szAnsi, ansiLen, NULL, NULL);

顯示與驗證技巧

簡體系統下預設以 GBK 解碼顯示,若直接查看轉為 Big5 的檔案會出現亂碼。可通過「控制面板 → 區域和語言」將系統預設語言改為「繁體中文(台灣)」,重啟後系統以 Big5 解碼,原本亂碼的「中國」二字即可正確顯示。測試完成後建議改回原設定,避免影響其他程式顯示。

簡體 → Big5 完整鏈路

簡體 GBK → 繁體 GBK → 繁體 Big5:第一步在 GBK 內部做字形映射,第二步跨字符集轉換。反向同理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved