检测上载文本文件的编码(ASP.NET MVC)

时间:2013-01-09 12:43:11

标签: c# asp.net-mvc encoding

  

可能重复:
  How can I detect the encoding/codepage of a text file

我有一个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编码文件,所以我需要一种方法来检测提交文件的编码。

1 个答案:

答案 0 :(得分: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 ) {

    }

}