Кодирование URL с немецкими символами - PullRequest
0 голосов
/ 04 мая 2011

В моем приложении я получаю URL-адрес, такой как

http://www.wassersportlotse.de/php/lib/smart_image_resizer/image.php/Mühlendammschleuse.jpg?image=/media/images/uploads/Mühlendammschleuse.jpg

Когда в fullurl нет немецких символов, я могу просто использовать его без кодировки, и он отлично работает.Однако, если я получу URL, такой как приведенный выше, он не будет работать (проблема связана с ü).Ниже я попытался закодировать отдельные части URI безрезультатно.Как всегда совет очень ценится.

public ImageDownloader(String fullurl) throws URISyntaxException{
    URI uri = new URI(fullurl);

    path = uri.getPath();
    path = URLEncoder.encode(path);

    query = uri.getQuery();
    query = URLEncoder.encode(query);

    auth = uri.getAuthority();

    url = "http://" + auth + path + query;


}

Ответы [ 5 ]

1 голос
/ 04 мая 2011

Может быть, кодировщик кодирует Umlaut как символы UTF-8 (так что ü будет кодироваться двумя символами), и они не собраны должным образом на сервере (для нас это не работает с Tomcat).Чтобы решить эту ситуацию, мы использовали URLEncoder.encode(param, "ISO-8859-1") для кодирования параметров.

0 голосов
/ 03 апреля 2017

Попробовал unsing:

android.net.Uri.encode(urlString, ":/");

Кодирует строку, но пропускает ":" и "/".

0 голосов
/ 29 апреля 2016

У меня недавно была проблема с URL-адресами для изображений, имена которых включали умлауты и немецкие специальные символы, и я потерял день на поиски решения. Изображения просто не отображаются, если в имени файла или имени каталога есть ä или и ü. Я думал, что это может быть весна, или какая-то другая технология Java, с которой я работаю, или в браузере. И как ни странно, даже с закодированным URL, он не смог найти изображение. Но, в конце концов, решение было в моей конфигурации tomcat server.xml. В вашем файле server.xml найдите свой соединитель и добавьте эти две строки:

URIEncoding="UTF-8"
useBodyEncodingForURI="true"

В конце все должно выглядеть примерно так:

<Connector connectionTimeout="20000"
port="8080" 
protocol="HTTP/1.1" 
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"/>

Теперь мне не нужно url-кодировать URL. Это помощь моим клиентам, потому что они видят правильно написанные немецкие слова в URL.

Вот еще один совет: если вы кодируете в eclipse и запускаете и останавливаете свой сервер изнутри eclipse, тогда файл конфигурации (server.xml) может находиться в вашем рабочем пространстве eclipse в папке Servers. Это должно быть изменено здесь, чтобы оно работало с затмением. Это может приводить в бешенство, когда вы внесли изменения в свою основную конфигурацию Tomcat, и URL-адреса работают там, но они все еще не работают при запуске сервера в Eclipse.

Это сделало это для меня. Я надеюсь, что это помогает кому-то там! : -)

0 голосов
/ 04 мая 2011

Вы можете использовать класс Android Uri , чтобы помочь вам.В этом классе есть метод encode(), который будет использовать UTF-8 для кодирования вашей строки.

0 голосов
/ 04 мая 2011

Простого ответа нет, потому что это зависит от сервера, обслуживающего тот URI, какая кодировка ожидается.

Обычно это UTF-8.

В этом случае: используйте String.getBytes, указавкодировку UTF-8 и получить байтовый массив из этого.Перекодируйте этот байтовый массив как строку, взяв все байты <= 127 как есть, и подставив все остальные в форму% hh.(знак процента, затем две шестнадцатеричные цифры).Смотри <a href="http://greenbytes.de/tech/webdav/rfc3986.html#rfc.section.2.1" rel="nofollow">http://greenbytes.de/tech/webdav/rfc3986.html#rfc.section.2.1.

...