Pergunta

Eu estou tentando ler em um URL de imagem. Como mencionado na documentação do java, eu tentei converter a URL para URI por

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

Tenho a uma Exceção Java.io.FileNotFound para o arquivo http://www.shefinds.com/files/Christian-Louboutin- DÃ © Colleta © -100-pumps.jpg

O que estou fazendo de errado eo que é o caminho certo para codificar esta URL?

Update:
Estou usando Roma para ler em feeds RSS. Tomando sugestões de BalusC I se imprimiu a entrada em bruto a partir de diferentes etapas e parece que a Roma rss analisador está a utilizar-ISO 8859-1 em vez de UTF-8.

Foi útil?

Solução

funciona bem aqui (devolve um 403, é pelo menos não 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 eu corrigi-lo para que ele não retorna um 403, a imagem é corretamente 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));
}

Assim, seus problema está em outro lugar. Convertendo realmente não é necessário. O URL inicial é válido.

Talvez você está obtendo o URL real de alguma fonte binário usando a codificação de caracteres errado? A transição de é para é nomeadamente sugere que a fonte original era UTF-8 codificado e que o código foi lido de forma incorrecta no usando ISO-8859-1 em vez de UTF-8.

Atualizar : ou talvez você realmente codificado no código-fonte Java e salvando o arquivo fonte própria usando a codificação errada. Eu configurei meu editor (Eclipse) para salvar arquivos usando UTF-8 eo -Dfile.encoding também é padrão para UTF-8, isso explicaria por que ele funciona na minha máquina ;)

Update 2 : de acordo com as observações, em poucas palavras, tudo deve funcionar bem se a codificação usada para salvar o arquivo de origem corresponde ao -Dfile.encoding padrão da plataforma de execução (e a codificação de caracteres em questão suporta a é). Para evitar esses confrontos imprevistos sempre que quiser para distribuir o código, é realmente melhor para substituir caracteres não-ASCII hardcoded por escapes Unicode.

Outras dicas

Eu acho que a resposta técnica é "você não pode." caracteres não-ASCII não pode ser usado em uma URL de acordo com o padrão, e até mesmo alguns caracteres ASCII deve ser precedido com a sintaxe "% XX", onde XX é o valor ASCII do caractere.

Se alguma coisa, você pode escapar 'é' com '% E9', mas isso depende do servidor interpretar isso como uma codificação do personagem de acordo com ISO-8859-1. Enquanto isso não é tecnicamente permitido, eu acredito que muitos servidores irão fazê-lo.

A codificação do arquivo de origem é a culpa. Usando seu IDE, configurá-lo para UTF-8, e depois repaste o URL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top