Frage

Ich versuche, in einer Bild-URL zu lesen. Wie in der Java-Dokumentation erwähnt, habe ich versucht, die URL zu URI Umwandlung von

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();

Ich erhalte die eine Java.io.FileNotFound Ausnahme für Datei http://www.shefinds.com/files/Christian-Louboutin- DÃ © Colleta © -100-pumps.jpg

Was mache ich falsch und was ist der richtige Weg, um diese URL zu kodieren?

Update:
Ich bin mit Rom in RSS-Feeds zu lesen. Unter Vorschläge von BalusC Ich habe aus dem rohen Input von verschiedenen Stufen gedruckt und scheint, dass der ROM RSS-Parser mit ISO-8859-1 statt UTF-8.

War es hilfreich?

Lösung

Adaequat hier (gibt ein 403, es ist zumindest kein 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();

Wenn ich das Problem beheben, so dass es keine 403 zurückkehrt, wird das Bild richtig 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));
}

So Ihr Problem woanders liegt. Konvertieren ist eigentlich nicht benötigt. Die ursprüngliche URL ist gültig.

Vielleicht sind Erhalten Sie die aktuelle URL von einem Binärquelle der falsche Zeichencodierung verwenden? Der Übergang von é zu é legt nahe, nämlich, dass die ursprüngliche Quelle UTF-8 codiert wurde und dass der Code wurde falsch eingelesen sich mit der ISO-8859-1 statt UTF-8.

Aktualisieren : oder vielleicht haben Sie es tatsächlich in der Java-Quellcode fest einprogrammiert und Speichern der Quelldatei selbst die falsche Codierung. Ich habe meine Editor (Eclipse) konfiguriert Dateien speichern UTF-8 verwenden und die -Dfile.encoding auch auf UTF-8 vorbelegt ist, das würde erklären, warum es an meiner Maschine arbeitet ;)

Update 2 : wie pro den Kommentare, kurz gesagt, alles sollte gut funktionieren, wenn die Codierung speichern verwendet, um die Quelldatei des Standard -Dfile.encoding die Runtime-Plattform übereinstimmt (und die Zeichenkodierung in Frage unterstützt die é). Um diese unvorhergesehenen Kollisionen zu vermeiden, wenn Sie den Code verteilen mögen, es ist in der Tat besser fest einprogrammiert Nicht-ASCII-Zeichen von Unicode-Fluchten zu ersetzen.

Andere Tipps

Ich denke, die technische Antwort „Sie können es nicht.“ Nicht-ASCII-Zeichen können nicht in einer URL verwendet werden, gemäß der Norm, und sogar einige ASCII-Zeichen müssen mit „% XX“ Syntax entwertet werden, wobei XX der ASCII-Wert des Zeichens ist.

Wenn überhaupt, können Sie entkommen ‚é‘ mit ‚% E9‘, aber dies beruht auf dem Server dies als eine Codierung des Zeichens gemäß ISO-8859-1 interpretiert. Während dies technisch nicht erlaubt, ich glaube, viele Server es tun werden.

Die Codierung der Quelldatei ist schuld. Verwenden Sie Ihre IDE, setzen Sie ihn auf UTF-8, und dann die URL repaste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top