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