Question

Je tente d'analyser un fichier JSON UTF 16 encodées, mais j'ai rencontré un problème bizarre.

Chaque fois que j'utilise un FileInputStream, l'analyse du fichier semble commencer à mi-parcours. Par exemple, si le fichier est de 40 caractères, il commencera à caractère 20. Cette errors causes avec l'analyse du JSON, comme de toute évidence ses données commence à caractère 0 dans le fichier.

Cette question surgissait l'autre jour, en dépit de travailler pendant des semaines. Je ne vois pas de problème avec mon code tel qu'il n'a pas été modifié dans les jours qui ont précédé le début de l'émission.

L'une de mes tentatives solutions de contournement a été de passer à l'aide d'un FileReader. Il commence normalement à caractère nul, 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 le traitement JSON, mais je pense que le problème se situe quelque part dans le InputStreamReader, ou FileInputStream.

Voici le code qui est en cause;

JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...

Voici l'erreur qu'il jette. La reader.beginArray(); ligne ci-dessus cause 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 les chaînes de UTF16

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 en UTF-16 serait plus que bienvenue.

Était-ce utile?

La solution

Vous avez oublié de mettre à jour la question quand je trouve la solution.

L'erreur vient du fait que j'ai créé manuellement le fichier JSON plutôt que de générer ce programme.

Lorsque le fichier a été généré par la classe JSONWriter, méta-données supplémentaires a été ajoutée au fichier qui dit l'analyseur qu'il était un fichier JSON. Cette méta-données étaient manquantes dans le fichier créé manuellement, donc JSONReader vomissait des erreurs dans l'analyse du fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top