デコードできない IDNA でエンコードされた文字列がいくつかあります。Python では、u"xn--grohandel-shop-2fb".decode("idna")
「IDNA はラウンドトリップしません」というエラーが表示されます。についても同じです"xn--sottmqqo5-lgbe9b7no0hmz9u"
。
私は困惑しており、エラーをグーグルで調べてもまったく役に立ちません。
「IDNA does not round-trip」というエラーは、モジュールが文字列をデコードおよびエンコードするときに異なる結果を取得することを意味します。
Python の IDNA モジュールのソース コードを見ると、モジュールが入力を再作成できない場合、139 行目で「IDNA は往復しません」というエラーが発生します。デコード機能では、入力はドットで分割され、すべての部分が に変換されtoUnicode
ます。そこでテキストがデコードされますが、結果が返される前に結果がエンコードされ、入力と比較され、同じでない場合はエラーが発生します:「往復しません」またはencode(decode(text)) != text
.
エラー メッセージには、比較しようとした 2 つの文字列も表示されます。最初の例では、次のようになります。
UnicodeError: ('IDNA does not round-trip', 'xn--grohandel-shop-2fb', 'grosshandel-shop')
ß
「großhandel-shop」で「grosshandel-shop」に変換されたため、エラーが発生しますss
。このß
キャラクターは.de
2010 年後半に -tldに追加されたため、これはバグです。変更前は に変更ß
されるはずでしたss
。
2 番目の例は、「đsottĤmqĐqǗoĔ⢠5」に変換されるため、おそらく破損しています。