6 Réponses :


1
votes

Essayez d'abord ceci: xxx pré>

puis ouvrez le fichier dans le bloc-notes. Si cela a l'air bien, le problème réside dans votre enregistreur ou votre console qu'il n'est pas configuré d'utiliser utf-8 code>. Sinon le problème se situe très probablement dans l'API JSON que vous avez utilisé qu'il n'est pas configuré d'utiliser utf-8 code>. P>

EDIT STRY>: Si le problème est En fait, dans l'API JSON utilisé et que vous ne savez pas qui choisir, alors je recommanderais d'utiliser Gson . Il facilite vraiment la conversion d'une chaîne JSON à une JavaBean facile à utiliser. Voici un exemple de base: P>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;

import com.google.gson.Gson;

public class Test {

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://ajax.googleapis.com/ajax/services/search/web"
            + "?start=0&rsz=large&v=1.0&q=rz+img+news+recordid+border");
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
        GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);

        // Show all results.
        System.out.println(results);

        // Show title of 1st result (is arabic).
        System.out.println(results.getResponseData().getResults().get(0).getTitle());
    }

}

class GoogleResults {

    ResponseData responseData;
    public ResponseData getResponseData() { return responseData; }
    public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
    public String toString() { return "ResponseData[" + responseData + "]"; }

    static class ResponseData {
        List<Result> results;
        public List<Result> getResults() { return results; }
        public void setResults(List<Result> results) { this.results = results; }
        public String toString() { return "Results[" + results + "]"; }
    }

    static class Result {
        private String url;
        private String title;
        public String getUrl() { return url; }
        public String getTitle() { return title; }
        public void setUrl(String url) { this.url = url; }
        public void setTitle(String title) { this.title = title; }
        public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
    }

}


0 commentaires

1
votes

La partie importante du problème est la manière dont vous gérez le contenu de la réponse HTTP. C'est-à-dire comment créez-vous l'objet json ? Au moment où vous arrivez au code de votre message d'origine, le contenu a déjà été corrompu.

La requête entraîne des données codées UTF-8. Comment allez-vous l'analyser dans des objets JSON? Le codage correct est-il spécifié au décodeur? Ou le codage de caractères par défaut de votre plate-forme est-il utilisé?


0 commentaires

0
votes

L'API Google envoie correctement UTF-8. Je pense que le problème est que votre codage par défaut n'est pas capable de sortir en arabe. Vérifiez votre fichier fichier. / code> ou obtenir un codage comme ceci, xxx

si le codage par défaut est ASCII ou latin-1, vous obtiendrez "?" Vous devez le changer en UTF-8.


3 commentaires

system.out.println (charset.defaultCharSetSet ());


Sur notre serveur, quelqu'un a commenté cet appel et mentionné cela ne fonctionne pas toujours.


@Ballusc: J'ai parlé avec plus de collègue sur ce problème. C'est vraiment intriguant. J'ai posté une nouvelle question à ce sujet: Stackoverflow.com/Questtions/1749064/...



8
votes

Le problème que vous avez est probablement causé par un paramètre incorrect du codage du caractère au point que vous lisez dans la réponse HTTP de Google. Pouvez-vous publier le code qui reçoit une URL et analyse en réalité dans l'objet JSON?

Comme exemple, exécutez ce qui suit: xxx

Ceci utilise la norme plutôt laidule < code> url.openconnection () qui fait partie de l'aube du temps. Si vous utilisez quelque chose comme Apache httpClient , alors vous pouvez le faire vraiment facilement.

pour un peu de lecture de sol sur le codage et peut-être une explication de la raison pour laquelle nouvelle chaîne (str.getbytes (), "utf8"); ne travaillera jamais lire Article de Joel sur Unicode


1 commentaires

+2 Pour me pointer sur les paramètres de codage de caractères de INPUTStreamReader ()



2
votes

Je pense que le paquet JSON JSON JSON.ORG Java ne peut pas gérer UTF8, qu'il soit transmis sous la forme d'un caractère UTF8 ou de passer en réalité dans le code \ uxxxx code>. J'ai essayé les deux comme suit:

{"a":"?"}
{"a":"?"}


2 commentaires

Bonjour, avez-vous eu la solution à ce problème, tout mon projet dépend de Json.org, donc je ne peux donc pas le résoudre.


@Agnurjain Vous pouvez résoudre votre problème avec cette réponse Stackoverflow.com/a/10868238/2412686 , ajout du code org.apache .commons.lang3.stringscapepeutils.unescapejava ("\\ u 00e9") (Notez que nous utilisons une version plus récente de Apache Commons).



1
votes

Il y a un qui conserve le codage du http réponse (expressions tchèques) avec le message JSon comme ceci:

    mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |
| character_set_connection | utf8   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | utf8   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+


0 commentaires