我有一些无法解码的IDNA编码字符串。在Python中,我尝试u"xn--grohandel-shop-2fb".decode("idna")
并得到错误“IDNA不会往返”。 "xn--sottmqqo5-lgbe9b7no0hmz9u"
也一样。
我很难过,谷歌搜索错误根本没有帮助。
答案 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”中的ss
。 The ß
character was added to the .de
-tld late 2010,所以这是一个错误。在更改ß
之前应该更改为ss
。
你的第二个例子可能是腐败的,因为它转换为:“đsottĤmqĐqǗoĔĔ5”