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

Windows API 實現 Big5/GB 簡繁體雙向轉換完整程式碼

     編輯:VC 教學

利用 Windows 核心 API (MultiByteToWideChar, WideCharToMultiByte, LCMapString) 實現 **Big5 (繁體) ⇄ GB (簡體)** 雙向轉換,無需第三方資料表,相容性極佳。

轉換路徑設計

Big5 → Unicode (CP950) → GB 繁體 (CP936) → GB 簡體 (LCMapString SIMPLIFIED)
GB 簡體 → GB 繁體 (LCMapString TRADITIONAL) → Unicode (CP936) → Big5 (CP950)

核心函數 1:Big5 → GB 簡體

AnsiString __fastcall Big2Gb(AnsiString sBig)
{
    // 1. Big5 → Unicode
    int len = MultiByteToWideChar(950, 0, sBig.c_str(), -1, NULL, 0);
    wchar_t* unicode = new wchar_t[len + 1];
    MultiByteToWideChar(950, 0, sBig.c_str(), -1, unicode, len);

    // 2. Unicode → GB 繁體
    len = WideCharToMultiByte(936, 0, unicode, -1, NULL, 0, NULL, NULL);
    char* gbTrad = new char[len + 1];
    char* gbSimp = new char[len + 1];
    WideCharToMultiByte(936, 0, unicode, -1, gbTrad, len, NULL, NULL);

    // 3. GB 繁體 → GB 簡體
    LCMapString(0x0804, LCMAP_SIMPLIFIED_CHINESE, gbTrad, -1, gbSimp, len);

    AnsiString result = gbSimp;
    delete[] unicode; delete[] gbTrad; delete[] gbSimp;
    return result;
}

核心函數 2:GB 簡體 → Big5

AnsiString __fastcall Gb2Big(AnsiString sGb)
{
    // 1. GB 簡體 → GB 繁體
    int len = MultiByteToWideChar(936, 0, sGb.c_str(), -1, NULL, 0);
    char* gbTrad = new char[len * 2 + 1];  // 繁體可能較長
    LCMapString(0x0804, LCMAP_TRADITIONAL_CHINESE, sGb.c_str(), -1, gbTrad, len * 2);

    // 2. GB 繁體 → Unicode
    wchar_t* unicode = new wchar_t[len + 1];
    MultiByteToWideChar(936, 0, gbTrad, -1, unicode, len);

    // 3. Unicode → Big5
    len = WideCharToMultiByte(950, 0, unicode, -1, NULL, 0, NULL, NULL);
    char* big5 = new char[len + 1];
    WideCharToMultiByte(950, 0, unicode, -1, big5, len, NULL, NULL);

    AnsiString result = big5;
    delete[] gbTrad; delete[] unicode; delete[] big5;
    return result;
}

關鍵 API 說明

API用途關鍵參數
MultiByteToWideChar多位元組 → UnicodeCodePage: 950(Big5), 936(GB)
WideCharToMultiByteUnicode → 多位元組CodePage: 同上
LCMapString地區對應轉換LCMAP_SIMPLIFIED_CHINESE / LCMAP_TRADITIONAL_CHINESE

適用場景與注意

  • 適用於繁簡混雜的舊系統資料遷移、跨地區文字處理;
  • 轉換為**單向映射**,部分異體字/慣用語可能不準確,重要文檔建議人工覆核;
  • 現代專案建議直接使用 UTF-8 存儲,避免編碼轉換損耗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved