尝试通过我的交易应用程序处理交易以及与FIX通信时,出现此错误。

     java.lang.Error: Invalid UTF-8 Encoding
     at javolution.io.Struct$UTF8String.get(Struct.java:1105)


我使用UTF-8编码,并且已经在我的应用程序的每个POM文件中指定了它。
有没有人遇到过这个错误?

最佳答案

更新:

看来您遇到了几个现有的错误:Fault in handling of UTF8Strings within the Struct classXMLStreamReaderImpl ignoring xml encoding attribute?


  将某些字符串传递给UTF8String set方法会导致
  UTF8String映射到的内存块的字段边界
  在备用ByteBuffer中被超过。这似乎是由于
  某些UTF-8多字节字符扩展字符串。




似乎您正在处理的数据有问题,或者库中有错误。看一下source code of UTF8ByteBufferReader。从以下方法抛出异常


  private int read2(byte b)抛出IOException


在该方法的底部,您将看到


  抛出新的CharConversionException(“无效的UTF-8编码”);


我会仔细检查一下您接收到的数据实际上是UTF-8,因为该库似乎并不认为它是...



如果您正在尝试解码UTF8流,则可以使用常规Java。在线上有很多UTF8 examples。另外,您可能需要使用Apache的BOMInputStream

您也可以只读取字节并定期使用Charset#decode中的StandardCharsets.UTF_8

07-25 23:18