Я пытаюсь проанализировать файл JSON в кодировке UTF 16, однако натолкнулся на странную проблему.
Всякий раз, когда я использую FileInputStream
, анализ файла, кажется, начинается в средней точке. Например, если файл имеет длину 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 будет более чем приветствоваться.