Один из распространенных вопросов, с которым сталкиваются начинающие разработчики на Java, касается правильной кодировки HTTP URL-адресов. Это важный аспект работы с сетью, поскольку некорректно закодированный URL может привести к неправильной интерпретации запроса и ошибкам.
Примером может быть ситуация, когда URL содержит пробелы. Пробелы не допустимы в URL-адресах, поэтому они должны быть закодированы. В стандарте URL-кодирования пробел обычно заменяется на %20.
Рассмотрим пример URL:
http://example.com/first book.pdf
В Java есть утилитный класс java.net.URLEncoder, который предназначен для кодирования строк в соответствии со стандартом x-www-form-urlencoded. Однако, если попытаться использовать его для кодирования URL, результат будет некорректным:
java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
Выдаст:
http%3A%2F%2Fexample.com%2Ffirst+book.pdf
Как видим, пробел заменен на +, а не на %20, что является стандартом для URL.
Это происходит потому, что URLEncoder предназначен для кодирования данных формы HTML, а не для URL. В данных формы пробелы заменяются на +.
Чтобы корректно закодировать URL в Java, можно использовать класс java.net.URI. Он предназначен для представления и манипулирования URI (унифицированным идентификатором ресурса), который является обобщением URL.
URI uri = new URI("http", null, "example.com", -1, "/first book.pdf", null, null);
String request = uri.toASCIIString();
Этот код выдаст корректно закодированный URL:
http://example.com/first%20book.pdf
Таким образом, при работе с URL в Java рекомендуется использовать класс java.net.URI для корректного кодирования.
                    
                                            Перейти в телеграм, чтобы получить результаты теста
                                        



            
            
        
                    Забрать
Добавить комментарий