Java中字符编码的自动检测

Java中字符编码的自动检测,java,encoding,io,bufferedreader,Java,Encoding,Io,Bufferedreader,似乎是一个相当热门的问题,但我还没有找到解决方案;也许是因为它有很多种口味。不过在这里。我试图读取一些逗号分隔的文件(有时分隔符可能比逗号更独特,但现在逗号就足够了) 这些文件本应在整个行业内标准化,但最近我们看到许多不同类型的字符集文件出现。我希望能够设置一个BufferedReader来补偿这一点 做这件事并检测它是否成功的标准方法是什么 我对这种方法的第一个想法是循环使用字符集simple->complex,直到我可以毫无例外地读取文件为止。虽然不太理想 感谢您的关注。Mozilla的un

似乎是一个相当热门的问题,但我还没有找到解决方案;也许是因为它有很多种口味。不过在这里。我试图读取一些逗号分隔的文件(有时分隔符可能比逗号更独特,但现在逗号就足够了)

这些文件本应在整个行业内标准化,但最近我们看到许多不同类型的字符集文件出现。我希望能够设置一个BufferedReader来补偿这一点

做这件事并检测它是否成功的标准方法是什么

我对这种方法的第一个想法是循环使用字符集simple->complex,直到我可以毫无例外地读取文件为止。虽然不太理想


感谢您的关注。

Mozilla的universalchardet被认为是最有效的探测器。是它的java端口。还有一个端口。阅读本文,了解更多信息

检测编码是一个非常困难的问题,对于某些编码,了解其中一种编码是否正确的唯一方法是通过上下文分析(这是一项非常重要的任务)。如果您确切地知道需要支持哪些编码(例如UTF-16、UTF-8、ISO-8859-1),可能会变得更容易,但这取决于这些编码是什么。如果您没有得到异常,并不一定意味着它成功您提到的行业标准,这是你唯一应该更严格地执行的事情。您可以将
-Dfile.encoding
用作jvm参数,以仅支持我所在行业中的特定类型的编码。在我创建数据时,我仅对标准拥有权限。这很糟糕,但就是这样。我不能做任何事情来执行这些标准。在一个理想的世界里,情况会有所不同无论如何,像notepad++(据我所知,它不是java)这样的程序似乎比我做得更好。我想支持ANSI,UTF-8,UTF-16,USC-2(大和小)endian。任何超出此范围的内容都超出了我当前的范围。然后,我建议您在处理所有文件之前,在所有文件上运行native2ascii工具。那么您就不必担心java IOi的这个问题了,我知道许可证不是apache。它与apache相比有多大不同?