2012-03-21 2 views
3

У меня есть некоторые закодированные строки IDNA, которые я не могу декодировать. В Python я пробую u"xn--grohandel-shop-2fb".decode("idna") и получаю сообщение об ошибке «IDNA не крутится». То же самое для "xn--sottmqqo5-lgbe9b7no0hmz9u".IDNA не обращается туда-обратно

Я в тупике, и ошибка в Google не помогает вообще.

ответ

4

Ошибка «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»

+0

х - grohandel-магазин-2fb правильно кодируется IDNA 2008 (который является правильным в Германии/Denic поскольку время). Ваш Python, скорее всего, попытается декодировать его, используя старый IDNA 2003, который не знает «ß». см. Https://www.denic.de/en/know-how/idn-domains/ – rockdaboot

+0

Я создал отчет об ошибке: https://bugs.python.org/issue32437 – socketpair

 Смежные вопросы

  • Нет связанных вопросов^_^