ホームページ >バックエンド開発 >C++ >テキスト ファイルのエンコーディングをプログラムで正確に決定するにはどうすればよいですか?

テキスト ファイルのエンコーディングをプログラムで正確に決定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-17 01:51:09350ブラウズ

How Can I Programmatically Determine a Text File's Encoding with Precision?

テキスト ファイルのエンコーディングを正確に識別します

テキスト ファイルのエンコーディングを決定するのは、特にエンコーディングの概念に慣れていない場合、難しい場合があります。この記事ではメモ帳に匹敵する精度で確実な方法を紹介します。

バイト オーダー マーク (BOM) の役割

バイト オーダー マーク (BOM) ファイルがどのようにエンコードされているかを示す、テキスト ファイルの先頭にあるバイトのシーケンス。詳細は以下の通りです。

  • UTF-7: 2b 2f 76
  • UTF-8: ef bb bf
  • UTF-32 (LE): ff fe 00 00
  • UTF-16 (LE): ff fe
  • UTF-16 (BE): fe ff
  • UTF-32 (BE): 00 00 fe ff

コード例

上記の知識をコードに変換します:

<code class="language-csharp">/// <summary>
/// 通过分析字节顺序标记 (BOM) 来确定文本文件的编码方式。
/// 如果无法检测文本文件的字节序,则默认为 ASCII。
/// </summary>
/// <param name="filename">要分析的文本文件。</param>
/// <returns>检测到的编码。</returns>
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

    // 如果编码检测失败,则默认为 ASCII
    return Encoding.ASCII;
}</code>

これらのツールを使用すると、プロの自信を持ってテキスト ファイルのエンコードを決定できるようになります。

以上がテキスト ファイルのエンコーディングをプログラムで正確に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。