从测试开始,似乎尝试转换IDN和常规域名“只是工作”。 - 例如,如果输入不需要更改,punycode将只返回输入。
punycode.toASCII('lancôme.com');
返回:
'xn--lancme-lxa.com'
和
punycode.toASCII('apple.com');
返回:
'apple.com'
这看起来不错,但它是否在任何地方指定? 我可以安全地将所有内容转换为punycode吗?
答案 0 :(得分:2)
这是正确的。如果您查看将unicode字符串转换为ascii punycode的过程,该过程只会更改任何非ascii字符。由于常规域不能包含非ascii字符,如果正确实现了转换器,它将永远不会转换任何pure-ascii字符串。
您可以在此处详细了解如何将unicode转换为punycode:https://en.wikipedia.org/wiki/Punycode
Punycode在RFC 3492中指定:https://www.ietf.org/rfc/rfc3492.txt,它清楚地说:
"基本代码点隔离"是一个非常简单的 对扩展中出现的基本代码点进行有效编码 string:只需一次复制它们。
因此,如果您的扩展字符串由基本代码点组成,则只会在不更改的情况下进行复制。