IDNA不会往返

时间:2012-03-21 13:54:13

标签: python idn punycode

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

您收到错误是因为它已将“großhandel-shop”中的ß转换为“grosshandel-shop”中的ssThe ß character was added to the .de-tld late 2010,所以这是一个错误。在更改ß之前应该更改为ss

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