我FileUpload
在ASP.NET网页中有一个控件,用于上传文件,其中的内容(在流中)在后面的C#代码中处理,然后在页面上输出,使用HtmlEncode
.
但是,其中一些输出正在变得严重,特别是符号'£'作为Unicode FFFD REPLACEMENT CHARACTER输出.我已将其跟踪到输入文件,即Windows 1252('ANSI')编码.
问题是,
如何确定文件是编码为1252还是UTF8?它可能是,和
如果它在Windows 1252中,如何将其转换为UTF8,保留符号£等?
我看过网上但找不到满意的答案.
如果您知道该文件是使用Windows 1252编码的,则可以使用StreamReader打开该文件并传递正确的编码.那是:
StreamReader reader = new StreamReader("filename", Encoding.GetEncoding("Windows-1252"), true);
"true"告诉它根据文件前面的字节顺序标记设置编码,如果它们在那里的话.否则,它将以Windows-1252打开.
然后,您可以读取该文件,如果要转换为UTF-8,请写入使用该结束编码打开的文件.
对您的第一个问题的简短回答是,没有100%令人满意的方法来确定文件的编码.如果有字节顺序标记,您可以确定它的Unicode风格,但是如果没有BOM,您就会坚持使用启发式方法来确定编码.
我对启发式方法没有很好的参考.您可以搜索"记事本如何确定字符集".我记得前段时间有过这样的事情.
在实践中,我发现以下内容适合我的大部分工作:
StreamReader reader = new StreamReader("filename", Encoding.Default, true);
我读过的大多数文件都是我用.NET的StreamWriter创建的文件,它们是带有BOM的UTF-8.我得到的其他文件通常使用一些不了解Unicode或代码页的工具编写,我只是将其视为字节流,Encoding.Default表现良好.