Работает хорошо здесь (возвращает 403, это по крайней мере не 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();
Когда я могу это исправить, так что он не возвращает 403, изображение правильно 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));
}
Итак, ваша проблема лежит где-то в другом месте. Преобразование на самом деле не требуется. Исходный URL-адрес действителен.
Возможно, вы получаете фактический URL-адрес из какого-либо бинарного источника, используя неправильную кодировку символов? Переход от é
к é
предполагает, что исходный источник кодировался в кодировке UTF-8 и что код неправильно считывал его с использованием ISO-8859-1 вместо UTF-8.
Обновление: или, может быть, вы действительно закодировали его в исходном коде Java и сохранили исходный файл с неправильной кодировкой. Я настроил мой редактор (Eclipse) для сохранения файлов с использованием UTF-8 и -Dfile.encoding
также используются по умолчанию в UTF-8, что бы объяснить, почему он работает на моей машине;)
Update 2: в в комментариях, в двух словах, все должно работать нормально, если кодировка, используемая для сохранения исходного файла, соответствует по умолчанию -Dfile.encoding
платформы исполнения (и соответствующая кодировка символов поддерживает é
). Чтобы избежать этих непредвиденных столкновений, когда вы хотите распространять код, лучше заменить жестко закодированные символы без ASCII с помощью unicode-экранов.
@sammichy: устранить * .java * проблемы с кодировкой исходного файла, используйте ASCII escapin при создании своей строки: * "...: //www.shefinds.com/files/Christian-Louboutin-D \ u00e9collet \ u00e9 -100-pumps.jpg "*. Обратите внимание, что 'é' становится '\ u00e9' в исходном файле * .java *. – SyntaxT3rr0r
@sammichy: также то, что вы показали, не является сообщением об ошибке. Откуда вы это взяли и как вы напечатали его, чтобы знать, что это «...»//www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg"*? – SyntaxT3rr0r
@sammichy: для чего это стоит: * .java * файлы не имеют связанных с ними метаданных, поэтому это большая боль, чтобы обнаружить их кодировку и сделать эту работу безупречно в смешанной среде Linux, OS X, Windows, различных средах IDE. Поэтому в моей компании, где я написал рекомендации, * .java * files * должен * быть ASCII-only, и это выполняется с помощью скриптов во время сборки. – SyntaxT3rr0r