Это по дизайну. Насколько я могу судить, второй символ в вашей строке — это кодовая точка ʼn. Согласно последним таблицам кодов Unicode:
этот символ устарел, и его использование настоятельно не рекомендуется
Таблица кодов Unicode говорит, что устаревшая кодовая точка эквивалентна \u02bc
, за которой следует \u006e
.
Согласно javadocs, первым шагом, который делает IDN.toASCII(String)
, является использование алгоритма RFC 3491 stringprep / nameprep для обработки символов во входной строке. Аннотация RFC гласит:
В этом документе описывается, как подготовить метки интернационализированных доменных имен (IDN), чтобы повысить вероятность того, что ввод и сравнение имен будут работать таким образом, чтобы это было понятно обычным пользователям во всем мире. Этот профиль протокола stringprep используется как часть набора сетевых протоколов для интернационализации системы доменных имен (DNS).
(Другими словами, stringprep усложняет создание сложных доменных имен, которые выглядят одно, а означают другое.)
На самом деле, если вы углубитесь, вы обнаружите, что предписанное отображение в таблицах stringprep для \u0149
равно \u02bc
\u006e
; то есть эквивалент, определенный в таблицах кодов Unicode.
И... это то, что происходит.
Сводка
- Ваше ожидание того, что вы сможете использовать IDN в обоих направлениях, необоснованно.
- В любом случае вы не должны использовать этот символ, так как он устарел. (Конечно, использовать его в IDN — плохая идея!)
person
Stephen C
schedule
25.04.2017