半年前,我遇到了烦人的问题。仍然无法修复它。问题在于 log4j-logging,其中默认字符集是 utf 8。
有时我会收到不同编码的消息,CP1252。(没有办法改变这一点)。因此,登录 utf8 会使文本不可读。我可以以某种方式修复编码,并且此文本将在日志中可读。
但是,如果我将该“编码修复”应用于正常消息,它将被搞砸。我需要知道是否真的需要这种转换。不幸的是,我没有想法。
半年前,我遇到了烦人的问题。仍然无法修复它。问题在于 log4j-logging,其中默认字符集是 utf 8。
有时我会收到不同编码的消息,CP1252。(没有办法改变这一点)。因此,登录 utf8 会使文本不可读。我可以以某种方式修复编码,并且此文本将在日志中可读。
但是,如果我将该“编码修复”应用于正常消息,它将被搞砸。我需要知道是否真的需要这种转换。不幸的是,我没有想法。
正如 deceze 评论的那样,没有可靠的方法自动检测文本的编码。
大多数编码尝试对字符使用 1 个字节,因为相同的字节序列在不同的编码中意味着完全不同的字符串。几乎您唯一可以可靠地做的就是说“它不是有效的 UTF8 字符串”,其他常用的编码甚至没有严格的规则,哪些字节序列对其有效/无效。
您最好的选择是了解消息的编码。下一个选项是将文本保留为“utf8 字符串”旁边的字节数组。
如果您接受的编码集非常有限(utf8/utf16/cp1252),您可以尝试使用一些启发式方法来检测 - 即 UTF16 中的大多数英文字符串每隔一个字节都会有 0,您可以尝试查看是否字符串可以作为 UTF8 - 如果不是 - 则可能是剩余的编码。
Apache Tika 包含一个开源编码检测器。
还有商业替代品。