0

可能重复:
如何检测文本文件的编码/代码页

我有一个 ASP.NET MVC 应用程序。在我看来,我上传了一个文本文件并使用具有此签名的控制器方法对其进行处理

[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 回答