我能否将所有域名都视为 IDN 而不会产生任何不良影响?

Can I treat all domain names as being IDNs without any ill effects?

从测试来看,似乎尝试同时转换 IDN 和常规域名 'just works' - 例如,如果不需要更改输入,punycode 将只 return 输入。

punycode.toASCII('lancôme.com');

returns:

'xn--lancme-lxa.com'

punycode.toASCII('apple.com');

returns:

'apple.com'

这看起来不错,但是它在任何地方都被指定了吗? 我可以安全地将所有内容转换为 punycode 吗?

没错。如果您查看将 unicode 字符串转换为 ascii punycode 的过程,该过程只会改变任何非 ascii 字符。由于常规域不能包含非 ascii 字符,如果您的转换器正确实现,它永远不会转换任何纯 ascii 字符串。

您可以在此处阅读有关如何将 unicode 转换为 punycode 的更多信息:https://en.wikipedia.org/wiki/Punycode

Punycode 在 RFC 3492 中指定:https://www.ietf.org/rfc/rfc3492.txt,它明确表示:

"Basic code point segregation" is a very simple and efficient encoding for basic code points occurring in the extended string: they are simply copied all at once.

因此,如果您的扩展字符串是由基本代码点组成的,它将被原封不动地复制。