如何确定文本编码

我知道UTF文件有用于确定编码的BOM,但是其他编码却不知道如何猜测编码。

我是新的java程序员。 我编写了使用UTF BOM猜测UTF编码的代码。 但我有其他编码的问题。 我怎么猜他们。

有人可以帮帮我吗? 提前致谢。

这个问题与以前 的 几个问题重复。 至少有两个Java库试图猜测编码(尽管请记住,100%的时间无法猜测)。

  • GuessEncoding
  • jchardet (mozilla firefox使用的算法的Java端口)

当然,如果您知道编码只是三个或四个选项中的一个,那么您可以编写更准确的猜测算法。

简短的回答是:你做不到。

即使在UTF-8中,BOM也是完全可选的,并且通常建议不要使用它,因为许多应用程序无法正确处理它,只是将其显示为可打印的字符。 Byte Order Markers的最初目的是告诉UTF-16文件的字节顺序。

这就是说,大多数处理Unicode的应用都实现了某种猜测算法。 阅读文件的开头并查找某些签名。

如果您不知道编码并且没有任何指标(如BOM),则无法准确“猜测”编码。 存在一些可以给你提示的指针。

例如,ISO-8859-1文件(通常)不会有任何0x00字符,但是UTF-16文件会加载它们。

最常见的解决方案是让用户选择编码,如果您无法检测到它。