IDNA不会往返

Ste*_*eve 4 python punycode idn

我有一些IDNA编码的字符串,我无法解码.在Python中,我尝试u"xn--grohandel-shop-2fb".decode("idna")得到错误"IDNA不会往返".同样的"xn--sottmqqo5-lgbe9b7no0hmz9u".

我很难过,谷歌搜索错误根本没有帮助.

som*_*ome 5

错误"IDNA不往返"意味着模块在解码和编码字符串时获得不同的结果.

通过查看Python的IDNA模块的源代码,如果模块无法重新创建输入,则会在第139行引发错误"IDNA不会往返".在解码功能中,输入按点分割,每个部分都被转换toUnicode.在那里文本被解码,但在返回结果之前,它对结果进行编码并将其与输入进行比较,如果不相同则引发错误:"它不会往返"或encode(decode(text)) != text.

在错误消息中,您还会获得它尝试比较的两个字符串,在第一个示例中,您获得:

UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')
Run Code Online (Sandbox Code Playgroud)

你得到错误,因为它已经ß在"großhandel-shop"转换ss为"grosshandel-shop".该ß角色.de在2010年末被添加到-tld,所以这是一个错误.在改变之前ß应该改为ss.

你的第二个例子可能是腐败的,因为它转换为:"đsottĤmqĐqǗoĔĔ5"