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

「翻文轉字」C++Builder 編碼解碼元件 v1.0:支援 GB/Big5/HZ/QP/Base64/UU/XX 七大編碼雙向轉換

     編輯:關於C++

元件簡介

作者:周鵬飛(莫高軟件工作室)
開放原始碼、自由軟體,安裝後出現在元件面板「莫高軟件」頁。

功能矩陣

類別編碼/解碼說明
中文內碼互轉GB ⟷ Big5查表法,資源內建對照表
HZ 編碼/解碼RFC 1843 標準,~{ ~} 包裹
郵件/傳輸編碼Quoted-Printable (QP)RFC 2045,=XX 格式
Base64RFC 2045/4648,3→4 字元
UUencodeUnix-to-Unix,行首長度字元
XXencodeUU 改良,字元集 +-0-9A-Za-z
檔案/文字雙向支援字串與檔案流

安裝步驟 (BCB4)

  1. Component → Install Component
  2. Unit file name 指向 gbbig.cpp,Package 選既有 dclusr40.bpk 或新建 gb.bpk
  3. 編譯 → Install,若面板未出現,Component → Install Package → Add → gb.bpl

使用方式

將 gbbig.h / gbbig.res / gbbig.dcr 複製至專案目錄,像原生元件一樣拖放使用。

核心 API

// 設定輸入文字
void __fastcall Input(AnsiString Text);   // 或 InputText(char*)

// 選擇編碼模式 (Code 屬性 0~11)
property int Code;  // 0:GB→Big5, 1:Big5→GB, 2:EncHZ, 3:DecHZ,
                    // 4:EncQP, 5:DecQP, 6:EncBase64, 7:DecBase64,
                    // 8:EncUUE, 9:DecUUE, 10:EncXXE, 11:DecXXE

// 執行轉換
void __fastcall Encode();

// 取得結果
property AnsiString Output;

演算法亮點速覽

GB ⟷ Big5 查表法

// GB→Big5
xx = (gx-161)*190; yy = (gy-161)*2;
bx = Table[xx+yy]; by = Table[xx+yy+1];

// Big5→GB
xx = (bx-161)*316;
yy = (by<=126) ? (by-64)*2 : (by-98)*2;
gx = Table[xx+yy]; gy = Table[xx+yy+1];

Base64 編碼核心 (3 字節 → 4 字元)

void Base64(BYTE in[3], BYTE out[4]) {
    out[0] = in[0] >> 2;
    out[1] = ((in[0] & 0x03) << 4) | (in[1] >> 4);
    out[2] = ((in[1] & 0x0F) << 2) | (in[2] >> 6);
    out[3] = in[2] & 0x3F;
    // 映射表:A-Z a-z 0-9 + /
}

UUencode / XXencode 差異

  • UU:字元集 ` !"#$%&'()*+,-./0-9:;<=>?@A-Z[\]^_ (32~96),行首碼 = 長度+32
  • XX:字元集 +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,行首碼 = 查表(長度)

已知限制與現代化建議

  • 僅支援 ANSI 字串,Unicode 專案需自行轉碼。
  • 資源表內建,若需擴充字元集請替換 GB_BIG5 / BIG5_GB 資源。
  • 新專案建議改用 ICU、Boost.Locale 或 Windows MultiByteToWideChar 進行編碼轉換;Base64/QP 可用 OpenSSL EVP_EncodeBlock 或 C++17 std::base64 (提案中)。

結語

這個 2000 年誕生的元件,以單一檔案封裝七大編碼演算法,見證了中文軟體從內碼亂碼走向 Unicode 統一的歷程。雖然今日已較少直接使用,但其查表法、位操作、資源內建、Variant 陣列操作等技術細節,仍是 C++Builder 開發者寶貴的學習素材。

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