Question

Je suis en train de lire dans une URL d'image. Comme il est mentionné dans la documentation java, j'essayé de convertir l'URL URI par

String imageURL = "http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg";
URL url = new URL(imageURL);
url = new URI(url.getProtocol(), url.getHost(), url.getFile(), null).toURL();  
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();

Je reçois l'une exception Java.io.FileNotFound pour le fichier http://www.shefinds.com/files/Christian-Louboutin- © Dà© colletà -100-pumps.jpg

Qu'est-ce que je fais mal et ce qui est la bonne façon de coder cette URL?

Mise à jour:
J'utilise Rome pour lire les flux RSS. Prendre des suggestions de BalusC J'ai imprimé sur l'entrée brute de différentes étapes et que le Semble comme ROME analyseur rss utilise ISO-8859-1 au lieu de UTF-8.

Était-ce utile?

La solution

fonctionne très bien ici (renvoie un 403, il est au moins pas 404):

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();

Quand je résoudre ce problème pour qu'il ne retourne pas 403, l'image est correctement retireved:

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0");
InputStream input = connection.getInputStream();
OutputStream output = new FileOutputStream("/pic.jpg");
for (int data = 0; (data = input.read()) != -1;) {
    output.write(data));
}

Alors, votre problème est ailleurs. La conversion est en fait pas nécessaire. L'URL initiale est valide.

Peut-être vous obtenir l'URL d'une source binaire en utilisant l'encodage de caractères incorrect? La transition de é à é suggère à savoir que la source d'origine était UTF-8 codé et que le code est lu de façon incorrecte dans l'utilisation de la norme ISO-8859-1 au lieu d'UTF-8.

Mise à jour : ou peut-être que vous avez réellement Hardcoded dans le code source Java et enregistrez le fichier source lui-même en utilisant le mauvais codage. J'ai configuré mon éditeur (Eclipse) pour enregistrer des fichiers en utilisant UTF-8 et le -Dfile.encoding est également par défaut à UTF-8, qui expliquerait pourquoi il travaille à ma machine ;)

Mise à jour 2 : selon les commentaires, en un mot, tout devrait fonctionner correctement si le codage utilisé pour enregistrer le fichier source correspond à la -Dfile.encoding par défaut de la plate-forme d'exécution (et le codage des caractères en question prend en charge la é). Pour éviter ces affrontements imprévus quand vous le souhaitez distribuer le code, il est en effet préférable de remplacer les caractères non-hardcoded ASCII par les évasions unicode.

Autres conseils

Je pense que la réponse technique est « vous ne pouvez pas. » Les caractères non-ASCII ne peuvent pas être utilisés dans une URL en fonction de la norme, et même certains caractères ASCII doivent être échappés avec la syntaxe « % XX », où XX est la valeur ASCII du caractère.

Si quoi que ce soit, vous pouvez échapper « é » avec « % E9 » mais repose sur le serveur d'interpréter cela comme un codage du caractère selon la norme ISO-8859-1. Bien que cela ne soit pas permis techniquement, je crois que beaucoup de serveurs vont le faire.

L'encodage de votre fichier source est à blâmer. Utilisation de votre IDE, réglez-le sur UTF-8 et repaste l'URL.

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