Как сформировать URI для доступа к сетевому компьютеру с именем хоста, содержащим расширенные символы

У меня есть несколько компьютеров с Windows 7 в локальной сети, каждая с именем хоста. Одним из них является запуск приложения Java 8, которое должно получить доступ к другому компьютеру через HTTP, поэтому ему необходимо сформировать URI, содержащий имя хоста сервера. Машина, на которой работает HTTP-сервер, имеет имя хоста, содержащее японские символы, которые не допускаются в URI.

Как мне сконструировать URI для доступа к серверу в локальной сети? RFC 4501, "Унифицированные идентификаторы ресурсов системы доменных имен", говорит о кодировании в соответствии с RFC 3986, "Унифицированный идентификатор ресурса (URI): общий синтаксис", который я бы обозначил как процентное кодирование октетов UTF-8. Но RFC 3490, "Интернационализация доменных имен в приложениях (IDNA)", говорит о необходимости преобразования в Punycode.

Так что же это, кодировка процента или Punycode? Какая кодировка позволит приложению Java успешно искать и подключаться к другому компьютеру с Windows 7, содержащему расширенные символы в имени хоста, в локальной сети?

2 ответа

DNS поддерживает только ASCII в именах хостов, поэтому имена хостов, содержащие международные символы, должны быть зарегистрированы в DNS и закодированы в URL с использованием формата интернационализированных доменных имен (IDN), который использует как Nameprep, так и Punycode при кодировании символов, отличных от ASCII.

Также обратите внимание на RFC 3987 Internationalized Resource Identifiers (IRI), который позволяет (в основном) не кодировать международные символы и определяет алгоритмы для преобразования между IRI и URI.

Правильный ответ: "используйте Punycode для кодирования имени хоста при формировании URI". Это объяснено в статье W3C "Введение в многоязычные веб-адреса" и указано в RFC 3987"Интернационализированные идентификаторы ресурсов (IRI)".

Другие вопросы по тегам