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

支援 UNICODE/UTF-8/ANSI/BOM 互轉的 C++ 類別 (ZUtf8_16)

     編輯:VC 教學

功能概述

ZUtf8_16 類別提供編碼偵測與轉換,支援:

  • uni8Bit (預設 ANSI/ASCII)
  • uni16BE (UTF-16 Big Endian)
  • uni16LE (UTF-16 Little Endian,Windows 內部預設 UNICODE)
  • uniUTF8 (含 BOM)
  • uniUTF8NOBOM (無 BOM UTF-8)

介面定義

class ZUtf8_16 {
private:
    EncodingType m_unicodeMode;
    int isUTF8_16(const char *s, unsigned int len, unsigned *cchUnused);
    EncodingType __fastcall DetermineEncoding(unsigned char *data, size_t iLen);
public:
    __fastcall ZUtf8_16();
    __fastcall ~ZUtf8_16();
    EncodingType __fastcall GetEncodingType(void) { return m_unicodeMode; }
    bool __fastcall LoadFromStream(TMemoryStream *pStream, AnsiString &DestText);
    bool __fastcall StreamSaveToFile(TMemoryStream *pStream,
        AnsiString FileNameA, EncodingType unicodeMode);
};

核心方法

  • DetermineEncoding:分析資料流前幾位元組 (BOM: EF BB BF=UTF-8, FF FE=UTF-16LE, FE FF=UTF-16BE) 及內容特徵,自動判斷編碼類型。
  • LoadFromStream:讀取 TMemoryStream,偵測編碼,轉換為內部 AnsiString (當前系統代碼頁) 或 Unicode 字串。
  • StreamSaveToFile:將 TMemoryStream 內容按指定編碼寫入檔案 (可選擇是否寫入 BOM)。

使用場景

  • 讀取未知編碼的文字檔 (日誌、設定檔、原始碼)。
  • 跨平台檔案交換 (Windows UTF-16LE ↔ Linux UTF-8)。
  • 舊系統 ANSI 資料遷移至 Unicode。

原始碼開源 (作者:小笨象,https://www.9ele.com),可直接整合至 BCB/VCL 專案,修正 BUG 後請回饋作者。

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