首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

跨平台 Base64 編碼一致性:VB6 與 Android 的字元集陷阱

     編輯:程式設計綜合問答

問題現象

相同中文輸入,VB6 產生的 Base64 與 Android Base64.encodeToString(bytes) 不一致。

根因:字元集不同

  • VB6 StrConv(str, vbFromUnicode):依系統預設代碼頁 (中文 Windows 通常為 **GB2312/GBK**) 將 Unicode 轉為位元組。
  • Android string.getBytes() 無參數時:使用 **UTF-8** 編碼。
  • Base64 編碼的是**位元組序列**,字元集不同 → 位元組不同 → Base64 不同。

統一方案

// Android 端指定 GB2312 (或 GBK)
byte[] gbBytes = inputString.getBytes("GB2312");
String base64 = Base64.encodeToString(gbBytes, Base64.NO_WRAP);

// 若 VB6 端可改,建議雙方統一 UTF-8:
// VB6: 使用 ADODB.Stream + Type=adTypeText + Charset="UTF-8"
// Android: string.getBytes(StandardCharsets.UTF_8)

驗證清單

  1. 確認 VB6 專案編碼環境 (控制面板 → 區域 → 系統地區設定)。
  2. Android 端捕獲 UnsupportedEncodingException,回退 UTF-8。
  3. 雙方對照 RFC 4648 標準向量測試 (如 "中文" → "5Lit5paH" for UTF-8)。

最佳實踐

**全鏈路 UTF-8**:資料庫、傳輸協議、檔案存儲、日誌全部統一 UTF-8,消除字元集轉換 Bug 源頭。

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