我有一些无法解码的 IDNA 编码字符串。在 Python 中,我尝试u"xn--grohandel-shop-2fb".decode("idna")
得到错误“IDNA 不往返”。对于"xn--sottmqqo5-lgbe9b7no0hmz9u"
.
我很困惑,谷歌搜索错误根本没有帮助。
错误“IDNA 不往返”意味着模块在对字符串进行解码和编码时得到不同的结果。
通过查看 Python 的 IDNA 模块的源代码,如果模块无法重新创建输入,则会在第 139 行引发错误“IDNA 不往返”。在 decode 函数中,输入被点分割,每个部分都转换为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 late 2010,因此这是一个错误。在更改之前ß
应该更改为ss
.
您的第二个示例可能已损坏,因为它转换为:“đsottĤmqĐqǗoĔ⢠5”