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