从测试来看,似乎尝试将 IDN 和常规域名都转换为“正常工作” - 例如,如果不需要更改输入,punycode 只会返回输入。
punycode.toASCII('lancôme.com');
返回:
'xn--lancme-lxa.com'
和
punycode.toASCII('apple.com');
返回:
'apple.com'
这看起来很棒,但它是否在任何地方指定?我可以安全地将所有内容转换为 punycode 吗?
从测试来看,似乎尝试将 IDN 和常规域名都转换为“正常工作” - 例如,如果不需要更改输入,punycode 只会返回输入。
punycode.toASCII('lancôme.com');
返回:
'xn--lancme-lxa.com'
和
punycode.toASCII('apple.com');
返回:
'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,它明确表示:
“基本代码点分离”是对出现在扩展字符串中的基本代码点的一种非常简单和有效的编码:它们被简单地一次复制。
因此,如果您的扩展字符串由基本代码点组成,它将被复制而不会更改。