0

重複の可能性:
テキストファイルのエンコーディング/コードページを検出するにはどうすればよいですか?

ASP.NETMVCアプリケーションがあります。私の見解では、テキストファイルをアップロードし、この署名を使用してコントローラーメソッドで処理します

[HttpPost]
public ActionResult FromCSV(HttpPostedFileBase file, string platform)

アップロードされたファイルからストリームを取得file.InputStreamし、標準のStreamReaderを使用して読み取ります

using (var sr = new StreamReader(file.InputStream))
{
    ...
}

問題は、これがUTFテキストファイルに対してのみ機能することです。Windows-1250にテキストファイルがあると、文字がめちゃくちゃになります。エンコーディングを明示的に指定すると、Windows-1250でエンコードされたテキストファイルを操作できます

using (var sr = new StreamReader(file.InputStream, Encoding.GetEncoding(1250)))
{
    ...
}

私の問題は、UTFとWindows-1250でエンコードされたファイルの両方をサポートする必要があるため、送信されたファイルのエンコードを検出する方法が必要なことです。

4

1 に答える 1

0

Windows-1250でエンコードされたファイルをUTF-8としてデコードしようとすると、例外フォールバックを除いて例外が発生する可能性が非常に高くなります(そうでない場合、ファイルはASCIIサブセットのみを使用しているため、デコードに使用されるエンコードは関係ありません)。したがって、次のようなことができます。

Encoding[] encodings = new Encoding[]{
    Encoding.GetEncoding("UTF-8", new EncoderExceptionFallback(), new DecoderExceptionFallback()),
    Encoding.GetEncoding(1250, new EncoderExceptionFallback(), new DecoderExceptionFallback())
};


String result = null;

foreach( Encoding enc in encodings ) {

    try {
        result = enc.GetString( fileAsByteArray );
        break;
    }

    catch( DecoderFallbackException e ) {

    }

}
于 2013-01-09T12:50:38.987 に答える