1

取引アプリケーションを介して取引を処理しようとしているとき、および FIX と通信しているときに、このエラーが発生します。

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

私は UTF-8 エンコーディングを使用しており、アプリケーションの各 POM ファイルで指定されています。取引がアプリケーションに入ったときに発生しています。誰もこのエラーに遭遇したことがありますか?

4

2 に答える 2

1

FIX 標準は、UTF-8 ではなく ASCII を使用します。

于 2013-02-01T15:25:57.577 に答える
1

アップデート:

あなたが遭遇したのは、いくつかの既存のバグのようです: Struct クラス内の UTF8Strings の処理の失敗と、 xml エンコーディング属性を無視する XMLStreamReaderImpl?

特定の文字列を UTF8String set メソッドに渡すと、バッキング ByteBuffer で UTF8String がマップされているメモリ ブロックのフィールド境界を超えます。これは、文字列を拡張する特定の UTF-8 マルチバイト文字が原因のようです。


処理中のデータに問題があるか、ライブラリにバグがあるようです。UTF8ByteBufferReaderのソースコードを見てください。次のメソッドから例外がスローされています

private int read2(byte b) が IOException をスローする

そのメソッドの下部に向かって、あなたが見るでしょう

throw new CharConversionException("無効な UTF-8 エンコーディング");

あなたが受け取っているデータが実際にUTF-8であることを再確認します.そのライブラリはそれがそうであるとは考えていないようです...


UTF8 ストリームをデコードしようとしているだけの場合は、通常の Java を使用できます。多くのUTF8 の例がオンラインにあります。また、Apache のBOMInputStreamを使用する必要がある場合もあります。

バイトを読み込んで、定期的にStandardCharsets.UTF_8のCharset#decodeを使用することもできます。

于 2012-11-13T06:01:27.847 に答える