IDNA не туда и обратно - PullRequest
       65

IDNA не туда и обратно

4 голосов
/ 21 марта 2012

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

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

1 Ответ

5 голосов
/ 18 мая 2012

Ошибка «IDNA не в обоих направлениях» означает, что модуль получает другой результат при декодировании и кодировании строки.

Если посмотреть на исходный код для модуля IDNA Python, то в строке 139 возникает ошибка «IDNA не туда-обратно», если модуль не может воссоздать ввод. В функции декодирования вход разделяется на точки, и каждая часть преобразуется в toUnicode. Там текст декодируется, но перед возвращением результата он кодирует результат и сравнивает его с входными данными и выдает ошибку, если она не совпадает: «он не туда-обратно» или encode(decode(text)) != text.

В сообщении об ошибке вы также получите две строки, которые он пытался сравнить, в первом примере вы получите:

UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')

Вы получаете ошибку, потому что она преобразовала ß в "großhandel-shop" в ss в "grosshandel-shop". Символ ß был добавлен в .de -tld в конце 2010 , так что это ошибка. До изменения ß предполагалось изменить на ss.

Ваш второй пример, вероятно, поврежден, поскольку он преобразуется в: "đsottĤmqĐqǗoĔ ⢠5"

...