2

テキストファイルのエンコーディングスキーマを検出できるメソッドを作成しようとしています。世の中にはたくさんあることは知っていますが、私のテキストファイルが、、、またはのいずれかASCIIであることは確かです。私はこれらの3つを検出する必要があるだけです。誰かがこれを行う方法を知っていますか?UTF-8UTF-16

4

2 に答える 2

4

まず、ファイルをバイナリモードで開き、メモリに読み込みます。

UTF-8(またはASCII)の場合は、検証チェックを実行します。を使用してテキストをデコードしEncoding.GetEncoding("UTF-8", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetString(bytes)、例外をキャッチできます。取得しない場合、データは有効なUTF-8です。コードは次のとおりです。

private bool detectUTF8Encoding(string filename)
{
    byte[] bytes = File.ReadAllBytes(filename);
    try {
        Encoding.GetEncoding("UTF-8", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetString(bytes);
        return true;
    } catch {
        return false;
    }
}

UTF-16の場合は、BOM(FE FFまたはFF FE、バイト順序に応じて)を確認します。

于 2012-05-09T19:21:45.537 に答える
1

StreamReaderを使用してエンコーディングを識別します。

例:

using(var r = new StreamReader(filename, Encoding.Default))
{
    richtextBox1.Text = r.ReadToEnd();
    var encoding = r.CurrentEncoding;
}
于 2012-05-09T19:11:40.060 に答える