看了一下hutool源码,原理是截取字符串输入流的一段数量的字节,进行解码,如果成功就判断为某个编码;但是问题是,这个数量默认是2 << 14,如果字节数超过了这个数字,那么只用这个数字的字节去解码,可能就会解码失败,比如结果的地方有一个汉字3个字节,刚好最后一个字节不在这个数量之内,就会导致解析报错。
所以,我改成了使用全部字节来解码的api,这个错误果然消失了。
CharsetDetector.detect(bytes.length, new ByteArrayInputStream(bytes), utf8);