ホームページ > バックエンド開発 > C++ > バイト オーダー マーク (BOM) を使用してファイルのエンコーディングを正確に識別するにはどうすればよいですか?

バイト オーダー マーク (BOM) を使用してファイルのエンコーディングを正確に識別するにはどうすればよいですか?

DDD
リリース: 2025-01-17 01:47:09
オリジナル
1001 人が閲覧しました

How Can I Precisely Identify a File's Encoding Using Byte Order Marks (BOMs)?

バイト オーダー マーク (BOM) を使用してファイル エンコーディングを正確に識別します

StreamReader.CurrentEncoding メソッドは、ファイルのエンコード情報を常に確実に提供するとは限りません。ファイルのバイト オーダー マーク (BOM) を分析することは、エンコードを識別する正確かつ効率的な方法です。 BOM シーケンス (存在する場合) は、エンコード形式を示すことができます。

次のコード スニペットでは、ファイルの BOM に基づいてテキスト ファイルのエンコーディングを決定する GetEncoding というメソッドが導入されています。 BOM の検出が失敗した場合、デフォルトは ASCII になります:

<code class="language-csharp">public static Encoding GetEncoding(string filename)
{
    // 读取 BOM
    var 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート