我正在使用.NET中的StreamReader类:
using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
string filetext = reader.ReadToEnd();
}
当文件有BOM时,这样可以正常工作。我遇到了没有BOM的文件的麻烦..基本上我得到了胡言乱语。当我指定Encoding.Unicode它工作正常,例如:
using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
string filetext = reader.ReadToEnd();
}
因此,我需要将文件内容放入字符串中。那么人们通常如何处理这个呢?我知道没有解决方案可以100%的时间工作,但我想提高我的赔率..显然有那些试图猜测的软件(例如,记事本,浏览器等)。 .NET框架中是否有一种方法可以猜测我?有没有人有他们想分享的代码?
更多背景:这个question与我的几乎相同,但我在.NET中。这个问题让我进入了一个列出各种encoding detection库的博客,但没有一个在.NET中
答案 0 :(得分:7)
答案 1 :(得分:3)
你应该阅读Raymond Chen的这篇文章。他详细介绍了程序如何猜测编码是什么(以及来自猜测的一些乐趣)
http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx
答案 2 :(得分:1)
我很幸运Pude,C#
Mozilla Universal Charset Detector
端口。
答案 3 :(得分:0)
UTF-8的设计方式是不太可能使用UTF-8将任意8位编码的文本编码为latin1解码为正确的unicode。
所以最小的方法就是这个(伪代码,我不会谈论.NET):
尝试: u = some_text.decode(“UTF-8”) 除了UnicodeDecodeError: u = some_text.decode(“最可能编码”)
对于最可能编码的人,通常使用例如latin1或cp1252或其他什么。更复杂的方法可能会尝试&找到特定于语言的字符配对,但我不知道有什么东西可以作为一个库或其他类似的东西。
答案 4 :(得分:0)
答案 5 :(得分:0)
使用Win32的IsTextUnicode。
从一般意义上说,这是一个难题。设置:http://blogs.msdn.com/oldnewthing/archive/2007/04/17/2158334.aspx。
答案 6 :(得分:0)
一种hacky技术可能是采用文本的MD5,然后解码文本并以各种编码重新编码,每个编码MD5。如果一个匹配,你猜它就是那个编码。
对于处理大量文件的东西来说,这显然太慢了,但对于类似文本编辑器的东西,我可以看到它正常工作。
除此之外,移植来自Delphi SO问题的this post的java库,或使用IE MLang功能,都是动手的。
答案 7 :(得分:0)
请参阅我的(最近)对此的回答(据我所知,相当于)问题:How can I detect the encoding/codepage of a text file
它不会尝试猜测像MLang和NCharDet这样的一系列可能的“国家”编码,而是假设你知道你可能会遇到什么样的非unicode文件。据我所知,它可以非常可靠地解决您的问题(不依赖于MLang的“黑匣子”)。