Domanda

Sto cercando di leggere in un URL di un'immagine. Come indicato nella documentazione di Java, ho provato a convertire l'URL di URI da

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

Ho l'un'eccezione Java.io.FileNotFound per il file http://www.shefinds.com/files/Christian-Louboutin- Dà © colletà © -100-pumps.jpg

Che cosa sto facendo male e che cosa è il modo giusto per codificare questo URL?

Aggiornamento:
Sto usando Roma per leggere i feed RSS. Prendendo suggerimenti da BalusC ho stampati all'ingresso grezzo da diverse fasi e sembra che il feed parser ROMA utilizza ISO-8859-1 anziché UTF-8.

È stato utile?

Soluzione

funziona bene qui (restituisce un 403, è per lo meno non a 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();

Quando posso risolvere il problema in modo che esso non restituisce un 403, l'immagine viene correttamente 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));
}

Così il vostro problema si trova da qualche altra parte. La conversione non è effettivamente necessario. L'URL iniziale è valido.

Forse si sta ottenendo l'URL reale da qualche fonte binario utilizzando la codifica dei caratteri che non va? Il passaggio di é per é cioè suggerisce che la fonte originale era UTF-8 codificati e che il codice è errato letto nella usando ISO 8859-1-anziché UTF-8.

Aggiorna : o forse hai effettivamente codificato nel codice sorgente di Java e salvare il file sorgente stessa utilizzando la codifica sbagliata. Ho configurato il mio editore (Eclipse) per salvare i file usando UTF-8 e il -Dfile.encoding è anche in default a UTF-8, che spiegherebbe perché funziona alla mia macchina ;)

Aggiorna 2 : come per i commenti, in poche parole, tutto dovrebbe funzionare bene se la codifica utilizzata per salvare il file di origine corrisponde al -Dfile.encoding predefinito della piattaforma runtime (e la codifica dei caratteri in questione sostiene la é). Per evitare questi scontri imprevisti in qualsiasi momento per distribuire il codice, è davvero meglio per sostituire caratteri non-ASCII hardcoded da fughe unicode.

Altri suggerimenti

Credo che la risposta tecnica è "non si può." I caratteri non ASCII non possono essere utilizzate in un URL secondo lo standard, e anche alcuni caratteri ASCII devono essere scappati con la sintassi "% XX", dove XX è il valore ASCII del carattere.

Se non altro, si può sfuggire 'E' con '% E9', ma questo si basa sul server interpretare questo come una codifica del carattere secondo la norma ISO-8859-1. Anche se questo non è tecnicamente consentito, credo che molti server faranno.

La codifica del file di origine è la colpa. Utilizzando l'IDE, impostare a UTF-8, e quindi repaste l'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top