UTF16でエンコードされたJSONファイルを解析しようとしていますが、奇妙な問題が発生しました。InputStreamReader、FileInputStreamは、始まりではなく中点でファイルの解析を開始します
私がFileInputStream
を使用するときはいつも、ファイルの解析は中点から始まるようです。たとえば、ファイルの長さが40文字の場合、文字20から始まります。これは、JSONの解析でエラーが発生します。これは、データがファイルの文字0から始まるためです。
数週間働いていたにもかかわらず、この問題は前日に崩壊しました。問題が始まるまでの間に変更されていないので、私のコードには問題は見られません。
私の試みた回避策の1つは、FileReader
を使用するように切り替えることでした。通常は文字ゼロで開始されますが、文書内の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();
...
どれソリューションであり、それは元の問題への修正、またはUTF16としてファイルを読み込む別の方法であること歓迎する以上のものです。
JSONファイルはバイトオーダーマーカーで始まりますか?どのように生成されますか? – Joni
私が現在使用しているファイルは手作業で作成されました。手動で有効なjsonを入力したときと同じです。前のファイルは、gsonライブラリの 'JsonWriter'クラスを使って生成されました。 –
どのエディターを使用しましたか? – Joni