当前位置:  开发笔记 > 编程语言 > 正文

如何将可能的Windows 1252'ANSI'编码上传文件转换为.NET中的UTF8?

如何解决《如何将可能的Windows1252'ANSI'编码上传文件转换为.NET中的UTF8?》经验,为你挑选了1个好方法。

FileUpload在ASP.NET网页中有一个控件,用于上传文件,其中的内容(在流中)在后面的C#代码中处理,然后在页面上输出,使用HtmlEncode.

但是,其中一些输出正在变得严重,特别是符号'£'作为Unicode FFFD REPLACEMENT CHARACTER输出.我已将其跟踪到输入文件,即Windows 1252('ANSI')编码.

问题是,

    如何确定文件是编码为1252还是UTF8?它可能是,和

    如果它在Windows 1252中,如何将其转换为UTF8,保留符号£等?

我看过网上但找不到满意的答案.



1> Jim Mischel..:

如果您知道该文件是使用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表现良好.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有