UTF-8 encoder les Url
Info:
J'ai un programme qui génère le XML sitemaps pour Google Webmaster Tools (entre autres choses).
GWTs me donne des erreurs pour certaines sitemaps car les Url contiennent des séquences de caractères comme ã¾, ã‹, ã€, etc. **
GWTs dit:
Nous avons besoin de votre fichier Sitemap pour être codé en UTF-8 (vous pouvez généralement le faire lorsque vous vous enregistrez le fichier). Comme avec tous les fichiers XML, les valeurs de données (y compris les Url) doit utiliser les codes d'échappement pour les caractères: &, ', ", <, >.
Les caractères spéciaux sont excaped dans les fichiers XML (avec des entités HTML).
Fichier XML extrait de:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://domain/folder/listing-ã.shtml</loc>
...
Sont mes Url codées en UTF-8?
Si pas, Comment puis-je le faire en Java?
Ce qui suit est la ligne dans mon programme où j'ai ajouter l'URL du sitemap:
siteMap.addUrl(StringEscapeUtils.escapeXml(countryName+"/"+twoCharFile.getRelativeFileName().toLowerCase()));
** = Je ne suis pas sûr que ceux qui sont à l'origine de l'erreur, probablement les deux premiers exemples.
Je m'excuse pour tout le montage.
J'ai édité la question beaucoup de choses.
Ouvrez votre sitemap XML fichiers dans un éditeur de texte qui prend en charge l'encodage UTF-8 (comme Notepad++) pour un test rapide pour déterminer si vos fichiers sont enregistrés dans le bon encodage.
Fait. Pas certain de l'endroit où chercher à voir si les Url sont correctement codés en UTF-8. J'ai fourni un extrait du fichier XML. On dirait que les personnages ont été échappés (avec des entités HTML).
le menu Encodage dans Notepad++ vous permettra de visualiser l'encodage utilisé. Vous pouvez modifier l'encodage du fichier, mais ce n'est pas le point; l'utilisation de l'approche suggérée pour spécifier l'encodage de l'URL. En outre, aussi, assurez-vous d'écrire le fichier sitemap à l'aide de l'encodage UTF-8 (lorsque vous utilisez la classe FileOutputStream ou d'une autre catégorie).
OriginalL'auteur Adam Lynch | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
URLEncoder.encode(stringToBeEncoded, "UTF-8")
pour encoder l'url.application/x-www-form-urlencoded
encoder la chaîne. Ce n'est généralement acceptable pour les paramètres utilisés dans la requête de la partie. Il ne serait pas encoder la trajectoire de la partie segments correctement, par exemple.Comment êtes-vous sûr que cela ne fonctionne? Suggérez-vous de j'ai modifier la ligne à
siteMap.addUrl(StringEscapeUtils.escapeXml(URLEncoder.encode(countryName+"/"+twoCharFile.getRelativeFileName().toLowerCase(), "UTF-8")));
?non, vous ne pouvez pas simplement passer un chemin en partie grâce à cette méthode - barres obliques seront codées et les espaces seront codées de manière incorrecte. Cette méthode n'est utile que pour les Uri lors de l'encodage des paramètres de requête pour les serveurs qui les attend.
hmm ok, donc
siteMap.addUrl(StringEscapeUtils.escapeXml(countryName+"/"+URLEncoder.encode(twoCharFile, "UTF-8").getRelativeFileName().toLowerCase()));
serait correct-je le prendre? (twoCharFile
serait leã¾
par exemple)McDowell est correct. Cela pour la plupart des paramètres. J'ai toujours penser que vous essayer quelques combinaisons de xml l'évasion et de l'encodage. (sentez l'exécution de l'un sur l'autre peut corrompre l'ensemble de la chaîne, de sorte que vous pouvez avoir à voir les pièces qui l'encodage xml, et le chemin d'accès besoin de cette solution)
OriginalL'auteur Jai
Url doit être de un pour cent encodé par le URI spec.
Par exemple, le point de code U+00e3 (ã) deviendrait la séquence encodée
%C3%A3
.Lorsqu'un URI est émise dans un document XML, il doit se conformer aux exigences de balisage XML.
Par exemple, l'URI
http://foo/bar?a=b&x=%C3%A3
devienthttp://foo/bar?a=b&x=%C3%A3
. L'esperluette est un caractère d'échappement en XML.Vous pouvez trouver une discussion détaillée de l'encodage des URI ici.
OriginalL'auteur McDowell
Ne pas confondre pourcentage d'encodage de caractères non-ASCII dans les Url avec XML l'entité s'échappe de caractères dans l'Url. Ce que vous devez faire lors de la création de sitemaps XML.
Dans l'honnêteté de la lecture de votre post original, il semble quelque chose de funky qui se passe parce que les personnages que vous mentionnez me rappeler de quand un échec de la conversion a eu lieu 🙂
Êtes-vous sûr que ces personnages font partie de votre Url lors de l'utilisation de l'UTF-8?
In honesty from reading your original post, it seems something funky is going on because the characters you mention remind me of when an unsuccessful conversion has taken place
. Vous êtes de droite. Mais j'ai un script prêt à aller par le biais de la DB et de la propreté. Mais encore il y a un problème avec l'encodage. Donc, si j'avais ces personnages, dois-je le pourcentage de coder les caractères seul et puis échapper à la raison pour XML (w/ entités)?1) Convertir le document en UTF-8 2) Pourcentage de coder tous les caractères non ASCII caractères 3) Convertir & & < < etc.
J'ai la première étape à faire. Et je sais comment le faire étape 2 mais n' % ont besoin d'être sauvés?
OriginalL'auteur Tom
Tous les caractères non-ascii dans l'URL doit être "x-url-encodage" encodée.
Voici le lien wiki qui explique cela: http://en.wikipedia.org/wiki/Percent-encoding.
En outre XML tous les symboles spéciaux (
&, >, <, etc.
) ont également échappé.Jai la réponse de montre la bonne méthode pour x-encoder chaîne arbitraire. Notez, cependant, qu'il ne fait pas du XML s'échapper.
J'ai ajouté un extrait du fichier XML. Est à la fois de vos réponses toujours pertinentes?
S'applique toujours, dans votre URL n'est pas x-url-encodé. Aussi, parce que les x-url-l'encodage n'est pas une opération triviale, je recommande fortement de garder URL pièces en ASCII. Je ne sais pas quelles sont les conditions pour vous système, mais pourriez-vous, éventuellement, renommez le fichier liste-20110523.shtml ( ou similaire le long de ces lignes )? De cette façon, vous ne avez même pas besoin de s'embêter avec l'encodage de vos Url.
Non, pas vraiment possible. Nous avons un grand grand système fait de cette façon.
OriginalL'auteur Alexander Pogrebnyak