Java le codage UTF-8 n'est pas définie à URLConnection
Je suis en train de récupérer des données à partir http://api.freebase.com/api/trans/raw/m/0h47
Comme vous pouvez le voir dans le texte il y a chante comme ceci: /ælˈdʒɪəriə/
.
Lorsque j'essaie d'obtenir le source de la page j'obtiens le texte avec chante comme ú
etc.
Jusqu'à présent, j'ai essayé avec le code suivant:
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
Ce que je fais mal?
La totalité de mon code:
URL url = null;
URLConnection urlConn = null;
DataInputStream input = null;
try {
url = new URL("http://api.freebase.com/api/trans/raw/m/0h47");
} catch (MalformedURLException e) {e.printStackTrace();}
try {
urlConn = url.openConnection();
} catch (IOException e) { e.printStackTrace(); }
urlConn.setRequestProperty("Accept-Charset", "UTF-8");
urlConn.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
urlConn.setDoInput(true);
urlConn.setUseCaches(false);
StringBuffer strBseznam = new StringBuffer();
if (strBseznam.length() > 0)
strBseznam.deleteCharAt(strBseznam.length() - 1);
try {
input = new DataInputStream(urlConn.getInputStream());
} catch (IOException e) { e.printStackTrace(); }
String str = "";
StringBuffer strB = new StringBuffer();
strB.setLength(0);
try {
while (null != ((str = input.readLine())))
{
strB.append(str);
}
input.close();
} catch (IOException e) { e.printStackTrace(); }
OriginalL'auteur Ales | 2012-01-19
Vous devez vous connecter pour publier un commentaire.
Le code HTML de la page est en UTF-8, et pourrait utiliser des caractères arabes et autres. Mais ces caractères ci-dessus Unicode 127 sont toujours codés comme des entités numériques comme
ú
. Un Accept-Encoding ne sera pas, de l'aide et de chargement en tant que UTF-8 est tout à fait correct.Vous avez à décoder les entités de vous-même. Quelque chose comme:
Par la façon dont ces entités pourrait découler de traités des formulaires HTML, de sorte que le montage côté de l'application web.
Après le code en question:
J'ai remplacé DataInputStream (Tampon)Lecteur de texte. InputStreams lire des données binaires, les octets; les Lecteurs de texte, des Chaînes de caractères. Un InputStreamReader a comme paramètre un InputStream et un encodage, et renvoie un Lecteur.
J'ai le même problème s'il vous plaît aider. m.appendTail(m); cette ligne d'erreur m'.
Désolé, corrigé; doit avoir été
m.appendTail(sb);
.il ne fait pas d'erreur, mais il ne fixe mon texte au format utf-8 . il n'est pas fixe des caractères turcs :(.
Je veux dire sb.append(ligne + "\n"); ce retour à la ligne, par exemple comme ceci hal? (il peut être halı) . vous écrivez d'abord <meta....> mais il n'a pas d'effet
OriginalL'auteur Joop Eggen
Essayez d'ajouter également à l'agent utilisateur de votre URLConnection:
Cela a résolu mon problème de décodage comme un charme.
OriginalL'auteur limlim
Eh bien, je pense que le problème est lors de la lecture du flux. Vous devez appeler la
readUTF
méthode sur laDataInputStream
au lieu de l'appelerreadLine
ou, ce que je voudrais faire, serait de créer unInputStreamReader
et définir l'encodage, alors vous pouvez lire à partir de laBufferedReader
ligne par ligne, ce qui serait à l'intérieur de votre try/catch):OriginalL'auteur Hoons