当前位置: 首页 > 编程语言 > C#

有没有办法找出文件使用的字符集编码?Share

时间:2023-04-10 16:47:58 C#

C#:有没有办法发现文件使用的字符集编码?有没有办法发现编码文件的字符集是什么?可靠地执行此操作的唯一方法是在文本文件的开头查找字节顺序标记。(这个blob更一般地表示所用字符编码的字节顺序,但也表示编码-例如UTF8、UTF16、UTF32)。不幸的是,此方法仅适用于基于Unicode的编码,在此之前无效(必须使用不太可靠的方法)。StreamReader类型支持检测这些标志以确定编码-您只需将标志传递给参数:newSystem.IO.StreamReader("path",true)然后您可以检查stremReader.CurrentEncoding的值以确定使用的编码由文件。但请注意,如果没有字节编码标志,CurrentEncoding将默认为Encoding.Default。请参阅:Detectingfileencodingsin.NET来自Msdn:虽然有一些基于文本中间某些字节序列的概率的尝试,但没有检测任意ANSI代码页的好方法。我们不在StreamReader中尝试。某些文件格式(如XML或HTML)可以在文件的第一行指定字符集,因此Web浏览器、数据库和类(如XmlTextReader)可以正确读取这些文件。但是许多文本文件并没有内置这种类型的信息。这不能100%可靠地完成。您必须决定您习惯的成本与准确性权衡。我在这个回复中讨论了许多可能的算法(优缺点):PowerShell搜索脚本忽略二进制文件正如理查德所说,没有完全可靠的方法来做到这一点。但是,这里有一些可能有用的链接:http://www.codeproject.com/KB/recipes/DetectEncoding.aspxhttp://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=469http://msdn.microsoft.com/en-us/netframework/aa569610.aspx#Question2我用C++编写了一段时间,它变得非常复杂。这是我所做的(接受第一个匹配的):这解决了许多无BOM的文本文件,但对使用自定义ANSI代码页存储的文本没有帮助。对于这些,不可能进行明确的检测。例如,一个用“东欧”编码保存的文件在用“西欧”默认代码页的计算机上加载时会出现乱码。在这种情况下唯一可能的帮助是让用户选择代码页(就用户体验而言,最好的办法可能是让用户在看到文本时更改假定的编码)。它在测试集上运行良好,但如果不可能的话,当然可能会有误解。代码页可以通过文本的统计分析来确定(例如,包含非ASCII字符的字符对和三元组的频率,或不同语言的单词列表,但我还没有找到任何合适的方法来尝试。Win32IsTextUnicode很漂亮糟糕,它只检查UTF-16,并且可能是记事本中“布什隐藏事实”的罪魁祸首。正如peterchen所写,你应该在Notepad.exe中写入“布什隐藏事实”,保存并重新打开,看看有多难它是检测编码。http://en.wikipedia.org/wiki/Bush_hid_the_facts要添加到可能有用的链接列表,这里是一个非常小的类,我放在一起来检测unicode编码(有或没有BOM)与默认代码页(通常Windows-1252,在.Net中标记为“ASCII”,如Encodings.ASCII中所示):http://www.architectshack.com/TextFileEncodingDetector.ashx它比StreamReader默认更进了一步,基本上正是@peterchen中描述的上面的答案,除了这个C#代码:很抱歉这个答案来晚了-我最近刚刚清理了课程并将其上线。以上是C#学习教程:C#:有没有办法查出文件的字符集编码使用的是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: