我正在尝试使用带有 xtokenize 的 Apache Camel Splitter 解析 UTF-16 编码的文档,这代表 Woodstox (com.ctc.wstx.sr.BasicStreamReader),目前我在读取文件之前无法知道文件的编码有些文件是 UTF-16,有些是 UTF-8:
.split().xtokenize(getToken(), 'w', NAMESPACES)
我遇到的问题是 Camel 告诉 Woodstox 使用哪种编码:
String charset = IOHelper.getCharsetName(exchange);
它将默认 UTF-8 设置为编码,因此 BasicStreamReader 尝试将 BOM 字节读取为 UTF-8 并失败
com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '�' (code 65533 / 0xfffd) in prolog; expected '<'
如https://www.w3.org/TR/xml/#sec-guessing XML Parser (Woodstox) 中所述,如果只有 Camel 允许它完成工作,它应该能够自动检测文件编码。
有没有办法不自己实现编码检测?