我能否将所有域名都视为 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.
因此,如果您的扩展字符串是由基本代码点组成的,它将被原封不动地复制。
从测试来看,似乎尝试同时转换 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.
因此,如果您的扩展字符串是由基本代码点组成的,它将被原封不动地复制。