Gor*_*don 1 java iso-8859-1 character-encoding
我有一个问题,我需要能够检测字节数组是否包含符合ISO-8859-1编码的字符.
我发现以下问题有用Java:如何确定流的正确字符集编码,但没有一个答案似乎完全回答我的问题.
我试图使用TikaEncodingDetector,如下所示
public static Charset guessCharset(final byte[] content) throws IOException {
final InputStream isx = new ByteArrayInputStream(content);
return Charset.forName(new TikaEncodingDetector().guessEncoding(isx));
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法基于字节数组的内容做出不同的预测.例如,包含'h','e','l','l','o'的数组被确定为ISO-8859-1.'w','o','r','l','d'出现在IBM500,'a','b','c','d','e'产生UTF-8.
我想知道的是,我的字节数组是否正确验证了ISO-8859-1标准.对于执行这项任务的最佳方式的建议,我将不胜感激.
我有一个问题,我需要能够检测字节数组是否包含符合ISO-8859-1编码的字符.
好吧,每个二进制数据流都可以在ISO-8859-1中被视为"有效",因为它只是一个单字节每字符方案,以一种简单的方式将字节0-255映射到U + 0000到U + 00FF.将其与UTF-8或UTF-16进行比较,其中某些字节序列无效.
因此,确定包含有效ISO-8859-1的流是否可以返回的方法true- 但这并不意味着原始文本是在ISO-8859-1中编码的...当用解码时对人类来说可能没有意义. ISO-8859-1,但仍然有效.
如果您知道原始纯文本不包含某些字符(例如,不可打印的控制字符),您可以通过检查流中的任何字节是否被列入黑名单来检测.更高级的检测可能会检查意外模式 - 但它变得非常具有启发性,并且可能与原始源文本的预期紧密耦合.