6 Réponses :
Essayez d'abord ceci: 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>
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 + "]"; }
}
}
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 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é? P> json code>? Au moment où vous arrivez au code de votre message d'origine, le contenu a déjà été corrompu. P>
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 si le codage par défaut est ASCII ou latin-1, vous obtiendrez "?" Vous devez le changer en UTF-8. p> p> fichier. / code> ou obtenir un codage comme ceci,
system.out.println (charset.defaultCharSetSet ()); code>
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/...
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: p> Ceci utilise la norme plutôt laidule < code> url.openconnection () code> qui fait partie de l'aube du temps. Si vous utilisez quelque chose comme Apache httpClient , alors vous pouvez le faire vraiment facilement. p> 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"); code> ne travaillera jamais lire
+2 Pour me pointer sur les paramètres de codage de caractères de INPUTStreamReader () code>
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":"?"}
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).
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 | +--------------------------+--------+
La réponse de Google devrait être dans UTF-8. Êtes-vous sûr que le terminal que vous utilisez Support UTF-8?
Les caractères arabes que vous décrivez sont b> dans Unicode et peuvent être représentés dans UTF-8. Vous avez probablement un problème de codage sur la sortie et non sur l'entrée.