Ошибка «IDNA не обращается туда» означает, что при декодировании и кодировании строки модуль получает другой результат.
Рассматривая source code для модуля IDNA модуля Python, ошибка «IDNA не обходит» в строке 139, если модуль не может воссоздать вход. В функции декодирования вход разделяется точками, и каждая часть преобразуется в toUnicode
. Там текст декодируется, но до того, как результат будет возвращен, он кодирует результат и сравнивает его со входом и вызывает ошибку, если это не то же самое: «он не округляется» или encode(decode(text)) != text
.
В сообщении об ошибке вы получите две строки, которые он пытался сравнить, в первом примере, вы получите:
UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')
Вы получаете сообщение об ошибке, потому что он преобразовал ß
в «GROßHANDEL-магазин» в ss
в "grosshandel-shop". The ß
character was added to the .de
-tld late 2010, так что это ошибка. До изменения ß
предполагалось изменить на ss
.
Ваш второй пример, вероятно, поврежден, так как он превращается в: «đsottĤmqĐqǗoĔ ⢠5»
х - grohandel-магазин-2fb правильно кодируется IDNA 2008 (который является правильным в Германии/Denic поскольку время). Ваш Python, скорее всего, попытается декодировать его, используя старый IDNA 2003, который не знает «ß». см. Https://www.denic.de/en/know-how/idn-domains/ – rockdaboot
Я создал отчет об ошибке: https://bugs.python.org/issue32437 – socketpair