UTF 16 でエンコードされた JSON ファイルを解析しようとしていますが、奇妙な問題に遭遇しました。
を使用するたびにFileInputStream
、ファイルの解析が中間点から開始されるようです。たとえば、ファイルの長さが 40 文字の場合、文字 20 から始まります。データは明らかにファイル内の文字 0 から始まるため、JSON の解析でエラーが発生します。
この問題は、数週間作業したにもかかわらず、先日発生しました。問題が発生するまでの数日間はコードが変更されていなかったため、コードに問題はありません。
私が試みた回避策の 1 つは、 FileReader
. 通常は文字 0 から始まりますが、ドキュメント内の UTF-16 文字を処理できないため、問題は解決しません。
JSON の処理に Google の Gson ライブラリを使用していますが、問題は のどこかにあると思いInputStreamReader
ますFileInputStream
。
以下は問題となっているコードです。
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...
これがスローされるエラーです。上記の行reader.beginArray();
により、例外が発生します。
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 21
at com.google.gson.stream.JsonReader.expect(JsonReader.java:337)
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:304)
at reader.ProofDatabase.load(ProofDatabase.java:130)
...
そして、これがUTF16文字列を処理しない私の部分的な回避策です
JsonReader reader = new JsonReader(new FileReader(file));
reader.beginArray();
...
元の問題の修正であろうと、UTF-16としてファイルを読み込む別の方法であろうと、解決策は大歓迎です。