我正在阅读各种格式和语言的文件,我目前正在使用一个小编码库来尝试检测正确的编码(http://www.codeproject.com/KB/recipes/DetectEncoding.aspx).
这很不错,但偶尔也会错过.(多语言文件)
我的大多数潜在用户对编码的理解很少(我希望最好的是"它与字符有关")并且不太可能在列表中选择正确的编码,所以我想让他们循环通过不同的编码,直到找到正确的编码只需点击一个按钮.
显示问题?点击这里尝试不同的编码!(那就是这个概念)
实现类似的东西最好的方法是什么?
编辑:看起来我没有表达得足够清楚.通过"循环编码",我不是指"如何循环编码?"
我的意思是"如何让用户按顺序尝试不同的编码而不重新加载文件?"
这个想法更像是这样的:假设文件加载了错误的编码.显示一些奇怪的字符.用户将单击"下一编码"或"先前编码"按钮,并且将以不同的编码转换该字符串.用户只需要一直点击,直到找到正确的编码.(无论哪种编码看起来对用户有用都会很好).只要用户可以点击"下一步",他就有合理的机会解决他的问题.
我到目前为止所发现的涉及使用当前编码将字符串转换为字节,然后将字节转换为下一个编码,将这些字节转换为字符,然后将字符串转换为字符串......可行,但我想知道是否存在这是一种更简单的方法.
例如,如果有一个方法可以读取字符串并使用不同的编码返回它,例如"render(string,encoding)".
非常感谢您的回答!
将文件作为字节读取,然后使用Encoding.GetString方法.
byte[] data = System.IO.File.ReadAllBytes(path); Console.WriteLine(Encoding.UTF8.GetString(data)); Console.WriteLine(Encoding.UTF7.GetString(data)); Console.WriteLine(Encoding.ASCII.GetString(data));
所以你必须只加载一次文件.您可以根据文件的原始字节使用每个编码.用户可以选择正确的一个,你可以使用Encoding.GetEncoding(...).GetString(data)的结果进行进一步处理.