Je tente d'analyser un fichier JSON codé en UTF 16, mais j'ai rencontré un problème étrange.InputStreamReader, FileInputStream commence l'analyse du fichier au milieu du point au lieu de commencer
Chaque fois que j'utilise un FileInputStream
, l'analyse du fichier semble commencer à mi-parcours. Par exemple, si le fichier a une longueur de 40 caractères, il commencera au caractère 20. Cela provoque des erreurs lors de l'analyse du fichier JSON, car il est évident que les données commencent au caractère 0 du fichier.
Ce problème a surgi l'autre jour, malgré des semaines de travail. Je ne vois aucun problème avec mon code car il n'a pas été modifié dans les jours qui ont précédé le début du problème.
L'une de mes solutions de contournement tentées consistait à utiliser un FileReader
. Il commence normalement au caractère zéro, mais il ne peut pas gérer les caractères UTF-16 dans le document, donc ne résout pas le problème. J'utilise la bibliothèque Gson de Google pour gérer JSON, mais je pense que le problème se situe quelque part dans le InputStreamReader
, ou avec FileInputStream
.
Voici le code qui est en cause;
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...
Voici l'erreur que cela déclenche. La ligne reader.beginArray();
ci-dessus provoque l'exception.
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)
...
Et voici ma solution partielle qui ne gère pas UTF16 chaînes
JsonReader reader = new JsonReader(new FileReader(file));
reader.beginArray();
...
Toute solution, que ce soit une solution au problème d'origine, ou une autre méthode de lecture dans le fichier comme UTF16 serait plus que bienvenue.
Le fichier JSON commence-t-il par un marqueur d'ordre d'octets? Comment est-il généré? – Joni
Le fichier que j'utilise actuellement a été créé à la main. Comme dans j'ai tapé manuellement le json valide. Le fichier précédent a été généré en utilisant la classe 'JsonWriter' dans la bibliothèque gson. –
Quel éditeur avez-vous utilisé? – Joni