【发布时间】:2011-03-13 19:19:51
【问题描述】:
我知道 UTF 文件具有用于确定编码的 BOM,但是其他具有 不知道如何猜测该编码。
我是新的 Java 程序员。 我已经编写了使用 UTF BOM 猜测 UTF 编码的代码。 但我对其他编码有疑问。我怎么猜。
有人可以帮助我吗? 提前致谢。
【问题讨论】:
我知道 UTF 文件具有用于确定编码的 BOM,但是其他具有 不知道如何猜测该编码。
我是新的 Java 程序员。 我已经编写了使用 UTF BOM 猜测 UTF 编码的代码。 但我对其他编码有疑问。我怎么猜。
有人可以帮助我吗? 提前致谢。
【问题讨论】:
此问题与several previous ones 重复。至少有两个 Java 库尝试猜测编码(但请记住,没有办法 100% 正确猜测)。
当然,如果您知道编码只会是三四个选项之一,您也许可以编写更准确的猜测算法。
【讨论】:
简短的回答是:你不能。
即使在 UTF-8 中,BOM 也是完全可选的,因此通常建议不要使用它,因为许多应用程序无法正确处理它,只是将其显示为可打印的字符。字节顺序标记的最初目的是区分 UTF-16 文件的字节顺序。
也就是说,大多数处理 Unicode 的应用程序都实现了某种猜测算法。阅读文件的开头并查找某些签名。
【讨论】:
如果您不知道编码并且没有任何指示符(如 BOM),则并非总是可以准确“猜测”编码。存在一些可以给你提示的指针。
例如,ISO-8859-1 文件(通常)没有任何 0x00 字符,但 UTF-16 文件有很多字符。
最常见的解决方案是,如果您无法检测到编码,则让用户选择它。
【讨论】: