Класс IDN
public final class IDN extends Object
Интернационализированные доменные имена определены в RFC 3490. RFC 3490 определяет две операции: ToASCII и ToUnicode. Эти две операции используют алгоритм Nameprep, являющийся профилем Stringprep, и алгоритм Punycode для преобразования строк доменных имён в обоих направлениях.
Поведение описанного выше процесса преобразования можно настроить с помощью различных флагов:
- Если используется флаг ALLOW_UNASSIGNED, преобразуемая строка доменного имени может содержать кодовые точки, не назначенные в Unicode 3.2 — версии Unicode, на которой основано преобразование IDN. Если флаг не используется, наличие таких неназначенных кодовых точек считается ошибкой.
- Если используется флаг USE_STD3_ASCII_RULES, строки ASCII проверяются на соответствие RFC 1122 и RFC 1123. Несоответствие требованиям считается ошибкой.
При поддержке интернационализированных доменных имён важно учитывать вопросы безопасности. Например, английские доменные имена могут быть гомоглифными — намеренно написанными с ошибками путём замены букв латиницы буквами других письменностей. В Техническом отчёте Unicode № 36 рассматриваются проблемы безопасности, связанные с поддержкой IDN, а также возможные решения. При использовании интернационализированных доменных имён приложения должны принимать надлежащие меры безопасности.
Если не указано иное, передача аргумента null любому методу этого класса приведёт к выбрасыванию NullPointerException.
- Начиная с:
- 1.6
- Внешние спецификации
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
ALLOW_UNASSIGNED |
Флаг, разрешающий обработку неназначенных кодовых точек |
static final int |
USE_STD3_ASCII_RULES |
Флаг, включающий проверку соответствия правилам ASCII STD-3 |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static String |
toASCII |
Преобразует строку из Unicode в ASCII-совместимую кодировку (ACE), как определено операцией ToASCII в RFC 3490. |
static String |
toASCII |
Преобразует строку из Unicode в ASCII-совместимую кодировку (ACE), как определено операцией ToASCII в RFC 3490. |
static String |
toUnicode |
Преобразует строку из ASCII-совместимой кодировки (ACE) в Unicode, как определено операцией ToUnicode в RFC 3490. |
static String |
toUnicode |
Преобразует строку из ASCII-совместимой кодировки (ACE) в Unicode, как определено операцией ToUnicode в RFC 3490. |
Подробное описание полей
ALLOW_UNASSIGNED
public static final int ALLOW_UNASSIGNED
- См. также:
USE_STD3_ASCII_RULES
public static final int USE_STD3_ASCII_RULES
- См. также:
Подробное описание методов
toASCII
public static String toASCII(String input, int flag)
Операция ToASCII может завершиться ошибкой. Она завершается ошибкой, если не удаётся выполнить любой из её шагов. В этом случае будет выброшено исключение IllegalArgumentException. Такую входную строку не следует использовать в интернационализированном доменном имени.
Метка — это отдельная часть доменного имени. Исходная операция ToASCII, определённая в RFC 3490, работает только с одной меткой. Этот метод может обрабатывать как одну метку, так и доменное имя целиком, предполагая, что метки в доменном имени всегда разделены точками. В качестве точек распознаются следующие символы: \u002E (точка), \u3002 (идеографическая точка), \uFF0E (полноширинная точка) и \uFF61 (полуширинная идеографическая точка). Если точки используются в качестве разделителей меток, этот метод также заменяет их все на \u002E (точку) в результирующей преобразованной строке.
- Параметры:
-
input— строка для обработки -
flag— флаг обработки; может быть равен 0 или результату логического ИЛИ любых допустимых флагов - Возвращает:
- преобразованную
String - Выбрасывает:
-
IllegalArgumentException— если входная строка не соответствует спецификации RFC 3490 - Внешние спецификации
toASCII
public static String toASCII(String input)
Этот упрощённый метод работает так, как если бы он вызывал двухаргументный вариант следующим образом:
toASCII(input, 0);
- Параметры:
-
input— строка для обработки - Возвращает:
- преобразованную
String - Выбрасывает:
-
IllegalArgumentException— если входная строка не соответствует спецификации RFC 3490 - Внешние спецификации
toUnicode
public static String toUnicode(String input, int flag)
Операция ToUnicode никогда не завершается ошибкой. В случае любой ошибки входная строка возвращается без изменений.
Метка — это отдельная часть доменного имени. Исходная операция ToUnicode, определённая в RFC 3490, работает только с одной меткой. Этот метод может обрабатывать как одну метку, так и доменное имя целиком, предполагая, что метки в доменном имени всегда разделены точками. В качестве точек распознаются следующие символы: \u002E (точка), \u3002 (идеографическая точка), \uFF0E (полноширинная точка) и \uFF61 (полуширинная идеографическая точка).
- Параметры:
-
input— строка для обработки -
flag— флаг обработки; может быть равен 0 или результату логического ИЛИ любых допустимых флагов - Возвращает:
- преобразованную
String - Внешние спецификации
toUnicode
public static String toUnicode(String input)
Этот упрощённый метод работает так, как если бы он вызывал двухаргументный вариант следующим образом:
toUnicode(input, 0);
- Параметры:
-
input— строка для обработки - Возвращает:
- преобразованную
String - Внешние спецификации
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/net/IDN.html