Какие кодировки следует использовать для кодирования URL

1

Мне нужно закодировать компонент URL. Компонент url может содержать специальный символ типа "?, #, =", А также символы китайского языка.

Какой из кодировок следует использовать UTF-8, UTF-16 или UTF-32? и почему?

  • 0
    Кодировка URL - это нечто совершенно иное, чем кодировка символов.
Теги:
url-encoding
urlencode

5 ответов

4
Лучший ответ

Я полагаю, вы имеете в виду процент кодирования здесь.

RFC 3986, раздел 2.5 довольно ясно об этом (акцент мой):

Когда новая схема URI определяет компонент, который представляет текстовые данные, состоящие из символов из Универсального набора символов [UCS], данные сначала должны быть закодированы в виде октетов в соответствии с кодировкой символов UTF-8 [STD63]; то только те октеты, которые не соответствуют символам в незарезервированном наборе, должны быть закодированы в percent-. Например, символ A будет представлен как "A", символ LATIN CAPITAL LETTER A WITH GRAVE будет представлен как "% C3% 80", а символ KATAKANA LETTER A будет представлен как "% E3% 82% A2 ".

Следовательно, это должен быть UTF-8.

Кроме того, остерегайтесь URLEncoder.encode(); в то время как рекомендация для него неоднократно повторяется, факт в том, что он не подходит для кодирования URI; цитируя javadoc самого класса:

Этот класс содержит статические методы для преобразования String в формат MIME приложения /x-www-form-urlencoded

который не является тем, что использует кодировка URI. (в случае, если вам интересно, application/x-www-form-urlencoded - это то, что используется в HTTP POST-данных). Вместо этого вы должны использовать шаблон URI. См. Здесь, например.

1

Ссылка с HTML-точки зрения.

Спецификация HTML4, раздел Не-ASCII-символы в значениях атрибута URI, указывает (мой акцент):

Мы рекомендуем, чтобы пользовательские агенты применяли следующее соглашение для обработки символов, отличных от ASCII, в таких случаях:

  1. Представляйте каждый символ в UTF-8 (см. [RFC2279]) как один или несколько байтов.
  2. Удалите эти байты с помощью механизма экранирования URI (т.е. Путем преобразования каждого байта в% HH, где HH - шестнадцатеричное обозначение байтового значения).

Аналогично, в спецификации HTML5 раздел " Выбор формы представления формы" в основном говорит о том, что UTF-8 следует использовать, если не указан атрибут accept-charset.

С другой стороны, я ничего не нашел, чтобы использовать UTF-8. Некоторые старые программы используют iso-8859-1, в частности. Например, Apache Tomcat до версии 8 имеет iso-8859-1 в качестве значения по умолчанию для его настройки URIEncoding.

0

Пойдите для UTF-8, также вы можете добиться того же самого результата URLEncoder.encode (строка, кодирование)

Кроме того, вы можете ссылаться на этот блог, он пытался кодировать некоторые китайские символы, такие как "维也纳 恩斯特哈 佩尔 球场",

0

UTF-8 (Unicode) - это кодировка символов по умолчанию в HTML5, так как она охватывает почти все символы/символы.

0

Кодируйте свой URL-адрес, чтобы избежать специальных символов. Есть несколько веб-сайтов, которые могут сделать это для вас. Например: http://www.url-encode-decode.com/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню