如何检测Java中的charset?

时间:2012-03-30 01:28:50

标签: java utf-8 character-encoding cp1252

半年前,我遇到了烦人的问题。仍然无法解决它。 问题在于log4j-logging,默认字符集是utf 8。

有时我会收到不同编码的消息,CP1252。 (没有办法改变这一点)。 因此,登录utf8会使文本无法读取。 我可以以某种方式修复编码,这个文本在日志中是可读的。

但是,如果我将“编码修复”应用于正常消息,它将被搞砸。 我需要知道是否真的需要转换。不幸的是,我没有想法。

2 个答案:

答案 0 :(得分:3)

deceze评论说,没有可靠的方法可以自动检测文本的编码。

大多数编码尝试使用1个字节的字符,因此相同的字节序列意味着在不同的编码中完全不同的字符串。几乎你唯一可以做到的就是说“它不是有效的UTF8字符串”,其他经常使用的编码甚至没有严格的规则,字节序列对它是无效的。

您最好的选择是了解邮件的编码。下一个选项是将文本保存为“utf8 string”旁边的字节数组。

如果您接受的编码集非常有限(utf8 / utf16 / cp1252),您可以尝试使用一些启发式方法来检测 - 即UTF16中的大多数英文字符串每隔一个字节会有0,并且您可以尝试看看字符串是否为UTF8 - 如果不是 - 可能是剩余的编码。

答案 1 :(得分:1)

Apache Tika包含一个开源编码检测器。

还有商业选择。