有什么区别国际化域名和国际化域名2? (为什么两个的作用几乎相同。为什么输出不同。应该使用哪一个)
输入文件:
Amazon.com
ama--zon.com
a--mazon.com
--amazon.com
amazon--.com
amazon-.com
cat infile | idn
Amazon.com
ama--zon.com
a--mazon.com
--amazon.com
amazon--.com
amazon-.com
cat infile | idn2
amazon.com
ama--zon.com
a--mazon.com
idn2: toAscii: string start/ends with forbidden hyphen
(最后 3 个条目)
THK
更新:这就是我正在寻找的答案。谢谢。投票接近。
GNU IDN 库 - Libidn 请注意,GNU libidn2 是 GNU libidn 的后继者。它附带 IDNA 2008 和 TR46 实现,还为 GNU libidn 提供兼容层。
答案1
您所说的“IDN”是IDNA2003,“IDN2”是IDNA2008(2010年指定)。
两者之间存在差异,并且“很复杂”。您没有详细说明您的用例或限制,因此没有必要深入讨论,因为还有很多其他资源。但主要区别之一是一些字符及其映射,以及大写字母的处理。
此外,您选择的名称均与 IDNA 无关,因为 IDNA 的目的是使用 US-ASCII 以外的其他字符来处理 DNS 中的名称。就像德语 eszett:ß
因此请见证以下内容:
$ idn straße.de
strasse.de
$ idn2 straße.de
xn--strae-oqa.de
是的,这个特性是两个标准之间的重要区别之一。
更重要的是“选择哪一个”。这不是由您来选择的,这取决于域名所在的注册局。今天(2023 年),所有注册局都应该使用 IDNA2008(但我无法证明没有注册局仍在使用 IDNA2003),但如果他们在 2010 年之前开始接受 IDN,他们还必须保持向前兼容性,因此他们可能注册了遵循 IDNA2003 且在 IDNA2008 下无效的域名,因此如果它们被删除,没有人能够在该注册局再次注册它们。然后,您有其他注册局根本不遵循 IDNA,因此允许各种其他情况,例如表情符号。
至于您在 上的具体示例amazon-.com
,请注意,根据 DNS 规则(因此与 IDN 本身无关),任何标签都不能以连字符开头或结尾。所以这个名字永远不会有效。