正在检测上载的文本文件的编码(ASP.NET MVC)
本文关键字:ASP NET MVC 编码 文件 检测 上载 文本 | 更新日期: 2023-09-27 17:51:15
可能重复:
如何检测文本文件的编码/代码页
我有一个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编码的文件,所以我需要一种方法来检测提交文件的编码。
尝试将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 ) {
}
}