我正在尝试解析一个 UTF 16 编码的 JSON 文件,但是我遇到了一个奇怪的问题。
每当我使用 aFileInputStream
时,解析文件似乎都是从中点开始的。例如,如果文件长度为 40 个字符,它将从字符 20 开始。这会导致解析 JSON 时出错,因为很明显它的数据从文件中的字符 0 开始。
尽管工作了数周,但前几天还是出现了这个问题。我看不出我的代码有任何问题,因为在问题开始之前的几天里它没有改变。
我尝试的解决方法之一是切换到使用 FileReader
. 它通常从字符零开始,但是它无法处理文档中的 UTF-16 字符,因此不能解决问题。
我正在使用 Google 的 Gson 库来处理 JSON,但是我认为问题出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 格式读取文件的另一种方法,都将受到欢迎。