首頁 > 後端開發 > C++ > 如何使用位元組順序標記 (BOM) 可靠地確定文件的編碼?

如何使用位元組順序標記 (BOM) 可靠地確定文件的編碼?

Linda Hamilton
發布: 2025-01-17 01:32:09
原創
423 人瀏覽過

How to Reliably Determine a File's Encoding Using its Byte Order Mark (BOM)?

精準辨識文件編碼:實用方法

正確識別文件編碼對於文字處理至關重要。然而,StreamReader.CurrentEncoding 屬性常常無法提供準確的結果。為了解決這個問題,更可靠的方法是分析檔案的位元組順序標記 (BOM)。

BOM 的作用

BOM 是一系列位元組,用於指示文字檔案的位元組序和編碼。常見的 BOM 包括:

  • UTF-8: EF BB BF
  • UTF-16LE: FF FE
  • UTF-16BE: FE FF
  • UTF-32LE: FF FE 00 00
  • UTF-32BE: 00 00 FE FF
  • ASCII: 無 BOM

基於 BOM 確定檔案編碼

以下 C# 程式碼提供了一個詳細的實作:

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    byte[] bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // 分析 BOM
    if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
    if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
    if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) return Encoding.UTF32; //UTF-32LE
    if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
    if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
    if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return new UTF32Encoding(true, true);  //UTF-32BE

    // 如果未检测到 BOM,则回退到 ASCII
    return Encoding.ASCII;
}</code>
登入後複製

使用此方法,您可以準確識別任何文字檔案的編碼,確保正確的資料解釋和文字處理。

以上是如何使用位元組順序標記 (BOM) 可靠地確定文件的編碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板