Unicode®技术标准#46
Unicode IDNA兼容性处理
总结
浏览器和电子邮件发送程序等客户端软件面临国际域名版本的艰难过渡2003年批准(IDNA2003),2010年批准的修订版(IDNA2008)。本文件中的规范提供了一种机制将此转换对客户端软件的影响降至最低,允许客户端软件访问下有效的域任一系统。
该规范提供了两个主要功能:一个是支持当前用户期望的全面映射域名的大小写和其他变体。这样的映射是允许的IDNA2008。第二个是支持IDNA2003允许的现有域名。这个第二个功能旨在改善过渡期。
状态
本文档已由Unicode成员和其他相关方,并已由Unicode联盟。这是一个稳定的文档,可以用作参考资料或被其他人引用为规范性参考规范。
Unicode技术标准(UTS)是独立的规范。符合Unicode标准并不意味着符合任何UTS。
请在网上提交更正和其他意见报告表格[反馈].有助于理解本文档的相关信息是在中找到工具书类。最新Unicode标准的版本,请参见[Unicode码]. 对于当前Unicode技术报告列表,请参见[报告]. 更多信息有关Unicode标准版本的信息,请参阅[版本].
域名的一大优点是通用性。URLhttp://Apple.com去了苹果公司使用任何浏览器从世界任何地方访问网站。电子邮件地址markdavis@google.com可以是用于从任何地方向本规范的编辑发送电子邮件在世界上,使用任何电子邮件。
最初,域名仅限于ASCII字符。这是使用其他角色给人们带来了巨大的负担。假设,对于例如,域名系统是希腊人发明的URL中只能使用希腊字符apple.com网站,一个人必须写有点像αππλε.κομ.英语演讲者不仅要熟悉希腊字符,但也必须选择那些对应的希腊字母到所需的英文字母。人们不得不猜测特定单词的拼写,因为没有精确匹配脚本之间。
直到最近,世界上大多数人口都面临着这种情况,因为他们的语言使用非ASCII字符。一个系统是2003年推出的国际化域名(IDN)。这个系统被称为的域名国际化应用或简称IDNA2003。此机制通过以下方式支持IDN将客户端软件转换为以下格式的方法Punycode公司。2010年批准了IDNA的修订版(IDNA2008)。这个该版本与IDNA2003有许多不兼容之处。
不兼容性迫使客户端软件的实现者,例如浏览器和电子邮件,在过渡期,注册中心从IDNA2003转移到IDNA2008。这个文档指定了一种将此影响降至最低的机制客户端软件的转换,允许客户端软件访问在任一系统下都有效的域。
该规范提供了两个主要功能。第一个是支持当前用户对套管期望的全面映射和其他域名变体。这样的映射是允许的IDNA2008。第二个特性是一种兼容机制支持IDNA2003允许的现有域名。第二个功能旨在改进过渡期。本规范包含规范和信息材料。只有符合性条款和文本它们直接或间接引用被认为是规范性的。
RFC系列统称为IDNA2003[IDNA2003年]允许域名包含非ASCII Unicode字符,不仅包括字符英语以外的拉丁语脚本语言所需(例如,奥语、Ħ、,或Þ),但也有不同的脚本,如希腊语、西里尔语、泰米尔语或韩国人。国际化域名,例如比彻.de然后可以在“国际化”URL,称为IRI,例如http://Bücher.de#titel网站。
允许非ASCII Unicode字符进入的IDNA机制域名包括对中的每个标签应用以下步骤包含Unicode字符的域名:
- 转换(映射)Unicode字符串以删除大小写和其他变量差异。
- 根据检查结果字符串的有效性某些规则。
- 将Unicode字符转换为与DNS兼容的字符使用专用编码的ASCII字符串Puny代码[RFC3492号文件].
例如,键入IRIhttp://Bücher.de网址在任何现代浏览器的地址栏中站点,即使“u”不是ASCII字符。这个工作,因为IRI中的IDN解析为Punycode字符串它实际上是由该站点的DNS存储的。类似地,当浏览器解释包含链接的网页,例如<ahref=“http://Bücher.de”>,合适的网站是已达到。(在本文档中,“浏览器”等短语解释“指从输入的IRI中解析出的域名地址栏以及链接中包含的内容HTML文本内部。)
如果是IDN比彻.de,的线路上域名实际使用的Punycode值为xn-断路器-kva.de。Punycode版本为通常也会转换回Unicode格式进行显示。这个结果显示字符串将是一个已经根据IDNA2003规则映射。此示例导致已将大小写转换为小写的IRI的显示字符串:
http://Bücher.de网址→http://xn-bcher-kva.de→http://bücher.de网址
IDNA2003的一个主要限制是对曲目的限制Unicode 3.2中的字符数,这意味着一些现代语言被排除或不完全支持。此外,在IDNA2003的限制,没有简单的方法来扩展剧目。IDNA2003也没有向用户明确注册他们正在为域注册的字符串名称(介于比彻.de和bücher.de先生例如)。
2010年初,新版IDNA获得批准。像IDNA2003一样,此版本由RFC集合组成,称为IDNA2008[IDNA2008年]. IDNA2008旨在解决IDNA2003中的主要问题。它扩展了域名中的字符,并为更新到Unicode标准的未来版本。此外,它明确定义有效域名的概念,以便注册者确切地了解域名字符串是什么已注册。
IDNA2008中的处理与IDNA2003中的许多常见处理相同域名。IDNA2003和IDNA2008都转换了Unicode域IRI中的名称(如网址:http://öbb.at)Punycode版本(如http://xn-bb-eka.at)。然而,IDNA2008没有保持严格的向后兼容性使用IDNA2003。主要区别是:
- 添加。某些IDN在IDNA2003中无效,但在IDNA2008中有效。
- 减法。一些IDN在IDNA2003中有效,但IDNA2008中无效。
- 偏差。一些IDN在两者中都有效,但可以解析前往不同的目的地。
有关更多详细信息,请参阅第7节,印尼国家航空公司比较。
IDNA2008和IDNA2003之间的差异可能导致互操作性和安全性问题。它们影响极为普遍字符,例如所有大写字符、所有半角或全角字符(通常在日本、中国和韩国使用),以及某些其他字符,如德语埃塞特(U+00DFß拉丁语小写字母SHARP S)和希腊语最终西格玛(U+03C2м希腊小写字母最终SIGMA)。
1.3.1映射
IDNA2003需要映射阶段,该阶段映射ÖBB.at公司到öbb.at(英国广播公司)例如。映射通常涉及将大写字符映射为小写字符对,但它还涉及其他类型的映射等效字符,例如映射半宽片假名字符到法线片假名日语字符。这个IDNA2003中的绘图阶段被包括在内,以匹配ASCII域名。用户习惯于同时拥有这两者中国互联网络和中国新闻网工作方式相同。他们希望带重音符号的域名具有相同的套管行为,因此?BB.at公司与相同öbb.at(英国广播公司)。有变化类似于其他脚本中的大小写差异。IDNA2003映射基于Unicode标准版本中指定的数据3.2; 该映射后来被形式化为Unicode属性[NFKC_底座].
请注意,casefolding生成稳定形式的字符串消除功能案例差异。它是不一样小写。特别是,添加了小写切罗基字符在Unicode V8.0中,大小写转换为大写相对应的人。
IDNA2008不需要映射阶段,但需要许可证一(称为“本地映射”或“自定义映射”)。对于有关允许的映射的更多信息,请参阅协议的文档[IDNA2008年],第4.2节,允许的字符和标签验证和第5.2节,转换为Unicode。
UTS#46规范定义了与IDNA2008协议的规范性要求尽可能与IDNA2003兼容。对于客户端软件提供最符合用户期望的行为关于使用现有数据名称处理域名域名将在客户支持上一致映射IDNA2003和使用UTS#46映射支持IDNA2008的客户端。
1.3.2偏差
在一些情况下,IDNA2008的使用没有兼容性映射将导致IDN解析为与IDNA2003中的不同IP地址,除非注册表或注册人采取特别行动。这会影响极少数字符,但因为这些字符在特定语言中的大量域名语言受到影响。这组字符称为“偏差”,如所示表1,偏差字符,在IRI背景下进行说明。
表1。偏差字符
烧焦 |
例子 |
IDNA2003结果 |
IDNA2008结果 |
ß 00(东风)
|
href=“网址:http://faß.de“ |
网址:http://fass.de→
网址:http://fass.de |
http://fa网址ß.德→
http://xn-fa-hia.de |
ς 03C2号
|
href=“http://βλОО.com" |
http://β_λoσ.com→
http://xn-nxasmq6b.com |
http://βλОО.com→
http://xn-nxasmm1c.com |
ZWJ公司 200天
|
href=“网址:http://ශ්රී.com" |
网址:http://→ http://xn-10cl1a0b.com
|
网址:http://→ 网址:http://xn-10cl1a0b660p.com
|
ZWNJ公司 200摄氏度
|
href=“网址:http://" |
网址:http://→ http://xn-mgba3gch31f.com
|
网址:http://→ http://xn-mgba3gch31f060k.com
|
有关发生这些情况的原因的更多信息IDNA2008中的偏差,请参阅[IDN常见问题].
偏差字符的解释差异导致潜在的安全漏洞。考虑一个涉及以下内容的场景http://www.sparkasse-gie网站ß英语.de,德国人IRI包含“Gießen储蓄和贷款”的IDN。
- Alice的浏览器支持IDNA2003。根据这些规则,http://www.sparkasse-gie网站ß英语.de映射到http://www.sparkasse-giessen.de,这将导致一个具有IP地址的站点01.23.45.67。
- 她去看望她的朋友鲍勃,并在他的浏览器。他的浏览器支持IDNA2008。根据这些规则,http://www.sparkasse-gie网站ß英语.de也是有效,但在中转换为其他Punycode域名http://www.xn--sparkasse-gien-2ib.de网站.这个可以使用IP地址访问其他站点101.123.145.167,恶搞网站。
Alice最终来到了钓鱼网站,为她的银行提供资金密码,她的钱被偷了。而。DE寄存器(DENIC)可能有一个关于将所有ß变体捆绑在一起的政策(这样他们都有相同的所有者)不需要注册中心。不太可能所有注册中心都拥有并执行在所有此类情况下,都会采取这样的捆绑政策。
有两个特别值得关注的偏差。IDNA2008允许标签中的连接符(ZWJ和ZWNJ)。相比之下,这些被IDNA2003中的映射删除。用于预期用途时上下文在特定脚本中,连接符会生成一个显示文本中的明显变化。然而,当在任何这些脚本或任何其他脚本中的其他字符看不见。例如,在拉丁字符之间使用时“a”和“b”没有明显的区别:序列“a<ZWJ>b”看起来就像“ab”。
由于细木工引入的视觉混淆性字符,IDNA2008为它们提供了一个特殊类别,称为CONTEXTJ,并且只允许在有限的上下文中使用CONTEXTJ字符:阿拉伯或印度字符的特定序列。然而,不需要检查执行IDNA2008查找的应用程序对于这些上下文,总体安全性依赖于注册表具有正确的实现。此外,IDNA2008背景限制不适用于具有不同域名的大多数情况由于ZWJ和ZWNJ,外观看起来很模糊。
满足用户对映射的期望,并提供最大与IDNA2003兼容,本文档指定了与IDNA2008一起使用。此外,为了更顺利地过渡到IDNA2008,本文档为标准化处理,允许一致性实现将由IDNA2003和IDNA2008之间的差异。此Unicode IDNA兼容性处理的结构符合IDNA2003原则,但将这些原则扩展到Unicode 5.2及更高版本。它还包含了IDNA2008提供的曲目扩展。
如果不需要过渡处理,可以使用UTS#46通过声明,纯粹作为IDNA2008的预处理(本地映射)特别符合一致性条款C3类。
通过使用此兼容性处理?BB.at公司将映射到有效域名称öbb.at(英国广播公司),从而匹配用户域名中大小写行为的预期。为了过渡使用,兼容性处理还允许域名包含IDNA2003中有效的符号和标点符号,例如√.com(具有关联的网页)。此类包含符号的域名将逐渐消失注册转移到IDNA2008。
实现还可以限制或标记(在UI中)以下域名包括符号和标点符号。有关更多信息,请参阅Unicode码技术报告#36,Unicode安全注意事项[UTR36标准].
使用Unicode IDNA兼容性处理转换将IDN转换为适合DNS查找的形式类似于“尝试IDNA2008,然后尝试IDNA2003”。然而,这种方法避免可能出现问题的双重查找。它允许浏览器和其他客户端,如搜索引擎,具有单一处理步骤,无需维护两个不同的实现和多个表。它解释了许多边缘情况会导致问题,并提供稳定的定义可预测的结果。
Unicode IDNA兼容性处理还提供偏差字符的备用映射。这有助于从IDNA2003过渡到IDNA2008。这取决于注册中心决定如何处理转换,例如,通过捆绑或阻止它们支持的偏差字符。实际上,对于偏差字符,转换是完全的。所有主要实现都已切换到对四个偏差字符的非过渡处理。
“注册中心”一词远不止包括顶级注册中心注册表,例如.de文件或.com网站。例如,.blogspot.com有更多域名比大多数顶级注册中心都注册了。可能会有不同为登记处及其任何分区域制定的政策。因此在过渡过程中需要考虑数以百万计的注册战略,而不仅仅是数百个。
在查找软件中,转换可能是细粒度的:例如,可能会过渡到IDNA2008规则以下各项的偏差.subdomain.com网站在给定点,但不适用于.com网站反之亦然。如果.tld格式捆绑或阻止偏差字符,然后客户端可以过渡偏差.tld格式,但不是为了(比如).subdomain.tld(子域.tld)。此外,具有UI的客户端软件,例如浏览器,可以为过渡提供更多选项。A满对这种过渡战略的讨论超出了本文档。
在此期间,文档(如HTML)的作者文件,可以明确参考IDNA2008对显式使用域名的Punycode形式标签。
域有两种稍有不同的兼容性机制过渡期间和之后的姓名。UTS#46因此规定两种特定类型的处理:过渡处理(一致性条款C1类)和非过渡处理(一致性条款指挥与控制)。它们之间的唯一区别是操控性四个偏差字符。
简要总结一下,UTS#46以IDNA2008为基础,分为三个版本地区:
- 映射。UTS#46映射用于保持最大的兼容性并满足用户期望。它是符合IDNA2008,允许映射输入。
- 符号和标点符号。UTS#46支持过渡期间符号和标点符号的处理期间。过渡将是平稳的:随着注册中心向IDNA2008带有符号的IDN的DNS查找拒绝。在这一点上,实际上是完全兼容的IDNA2008。
- 偏差(已弃用)。UTS#46提供了两种方式处理这些以支持转换。过渡处理(已弃用)建议在中进行DNS查找之前立即使用注册处不保证战略的情况捆绑或阻塞。非过渡处理,完全与IDNA2008兼容,应在所有情况下使用。
为了演示IDNA2003、IDNA2008和Unicode IDNA兼容性处理,请参见[DemoIDN公司]. 有关差异的更多详细信息,看见第7节,IDNA比较。UTS#46不会更改IDNA2008中定义的任何术语,例如A-Label或U-Label。
Unicode IDNA兼容性处理和IDNA2008解决与易混淆(所谓的"paypal.com网站“问题)。IDNA2008不允许某些符号和标点符号可以用于欺骗,例如对斜杠字符的欺骗("/"). 然而,这些只是用于欺骗的易混淆字符。此外,令人困惑角色本身在钓鱼中所占比例很小问题:大多数是“secure-wellsfargo.com”这样的案例。对于更多信息,请参阅[博茨迈尔]和[IDN常见问题]. 强烈建议:Unicode码技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode技术标准#39、Unicode安全机制[UTS39标准]是咨询有关处理混淆问题的信息客户端软件和注册表。特别是[UTS39标准]提供了可用于大幅减少处理国际域名时易混淆的数量,远远超出IDNA2008的功能。另请参见[DemoConf公司].
IDNA2003应用程序通常将处理后的字符串显示给用户。这通过减少可视性的机会来提高安全性易混淆性。例如,URL网址:http://google.com(大写字母I代替L)显示为网址:http://googie.com。
本规范主要针对进行查找的应用程序IDN的。然而,有一条强烈的建议建议登记处:不允许注册无效的标签根据非过渡处理,以及使用捆绑或阻塞包含易混淆字符的标签。
这些策略可以描述如下:
- 捆绑以下为:如果两个或多个标签不同,但容易混淆,并且注册了多个,每个注册人必须相同。
- 舞台调度以下为:如果两个或多个标签不同,但容易混淆,只允许注册一个,阻止其他的。不允许任何偏差的注册字符总数计为舞台调度。
注:Unicode以外的一些实现对这些策略使用不同的术语。特别是,在ICANN根区域标签生成规则中[RZLGR5型],术语可分配变量of X用于可以与X捆绑的标签,和术语封闭变体用于互斥标签。
实际注册并插入注册表的标签始终已处理。例如,xn—bcher-kva对应于比彻。然而,它可能注册表也可以请求“未处理”标签,例如作为比彻,作为注册的一部分程序,以便他们了解注册人的意图。然而,必须小心处理此类未加工标签:
- 将未处理的标签存储为字符序列注册人真正想申请的。
- 处理未处理的标签,并显示已处理标签,请注册人确认。
- 使用进行常规注册过程只有处理过的标签。
使用属性和语法定义代码点集Unicode码技术标准#18,Unicode正则表达式[UTS18标准]. 例如,组合标记集为由语法表示\p{gc=M}此外,“+”表示添加元素为了清晰起见,将其设置为一组。
在本文档中标签是域名的子字符串。该子字符串的两边由start或字符串末尾或以下任何字符,称为标签分隔符以下为:
- U+002E(.)完全停止
- U+FF0E(.)全宽全停
- U+3002(.)思想完全停止
- U+FF61(“”)半深思想完全停止
许多人使用术语“域名”和“主机”names”可互换。本文档如下[RFC3490协议]使用术语“域”名称”。
A类Bidi域名是一个至少包含一个字符的域名Bidi_Class R、AL或AN。请参见[IDNA2008年]RFC 5893,第1.4节。
实现一致性的要求Unicode码IDNA兼容性处理算法如下所述条款。实现可以声明符合以下任何或所有条件这些条款是独立的。
C1类(已弃用)。给定一个Unicode版本和Unicode码字符串,一致的实现过渡性的处理应通过应用第4节规定的过渡处理算法,处理。
指挥与控制。给定一个Unicode版本和Unicode码字符串,一致的实现非过渡性处理应通过应用第4节规定的非过渡处理算法,处理。
C3类。给定一个Unicode版本和Unicode码字符串,一致的实现预处理适用于IDNA2008应复制第4.4节规定的结果,IDNA2008预处理。
这些规格是符合逻辑的一个,设计为描述起来很简单。实际实现可以免费使用不同的方法,只要结果与逻辑算法。
任何一致的实现也可能具有更紧的有效性标准,而不是第4.1节,有效性标准例如应用程序可能会禁止或警告带有特定特征,例如:
- 带有特定脚本组合的标签(Safari)
- 具有用户指定字符之外的字符的标签语言(IE)
- 带有某些易混淆字符的标签(Firefox)
- 谷歌安全浏览API检测到的标签[安全浏览]
- 不符合有效性要求的标签IDNA2008年
- toUnicode生成的标签与标签不符执行toASCII时的有效性要求。
- 包含不包含在概述标识符的安全配置文件从Unicode技术标准#39,Unicode安全机制[UTS39标准]
- 不满足要求的标签限制级别4,适度限制性的从Unicode技术标准#39,Unicode安全机制[UTS39标准]
有关更多信息,请参阅Unicode技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode码技术标准#39,Unicode安全机制[UTS39标准].
IDNA2003提供了一个标志,使用STD3ASCII规则,允许实现选择是否遵守中的规则[STD3标准]. 这些规则不包括ASCII包含A-Z、A-Z、0-9和U+002D的集合外的字符(-)HYPHEN-MINUS。例如,一些浏览器还允许使用字符如U+005F(_)LOW LINE(下栏)在域名中,从而使用UseSTD3ASCIIRules=假,加上他们自己的有效性检查其他ASCII字符。
While期间UseSTD3ASCIIRules=真非常强大推荐,第5节,IDNA映射表向提供数据允许实现支持UseSTD3ASCIIRules=假在必要时与IDNA2003实现兼容。这个映射表执行以下操作:提供Status值和mapping两者的值UseSTD3ASCIIRules=真和UseSTD3ASCIIRules=假.使用UseSTD3ASCIIRules=假将需要对映射值应用自己的验证,如下所示如所示第4.1节,有效性标准。
Unicode IDNA兼容性处理的输入是一个前景域名称字符串以Unicode表示,可以选择Transitional或非过渡处理。域名由以下序列组成带有点分隔符的标签,例如“Bücher.de”。有关URL,参见第3.5节[STD13标准].
主要处理步骤
按顺序执行以下步骤,依次更改输入域名称字符串,然后将其输出为转换后的Unicode字符串,加上一个标志以指示是否存在错误。即使发生错误时,将执行字符串转换是可能的。
输入
- 一个有前途的人域名称表示为序列Unicode代码点的数量
- 布尔标志:使用STD3ASCII规则
- 布尔标志:检查连字符
- 布尔标志:CheckBidi公司
- 布尔标志:CheckJoiners(检查联接)
- 布尔标志:过渡_处理(已弃用)
- 布尔标志:忽略无效Puny代码
处理
- 地图对于每个代码中的点域名称字符串,在中查找状态值第5节,IDNA映射表,然后使用以下操作:
- 不允许的:保留代码点字符串中没有更改。注意:下面的转换/验证步骤检查不允许的字符,之后映射和规范化。
- 忽略:从中删除代码点字符串。这相当于将代码点映射到空字符串。
- 映射以下为:如果过渡_处理(已弃用)和代码点是U+1E9E大写夏普(ẞ),然后用“ss”替换字符串中的代码点。否则:
替换中的代码点字符串中映射的值第5节,印尼国家航空公司映射表。
- 偏离以下为:
- 如果过渡_处理(已弃用),替换代码通过中映射的值指向字符串第5节,IDNA映射表。
- 否则,请保留代码字符串中未更改的点。
- 有效的:保留中的代码点不变字符串。
- 规格化(Normalize)。规范化域名字符串到Unicode规范化表格C。
- 休息.打破在U+002E(.)FULL STOP处串入标签。
- 转换/验证。对于中的每个标签域名称字符串:
- 如果标签以“xn--”开头以下为:
- 如果标签包含任何非ASCII码位(即大于U+007F的码位),请记录存在错误,然后继续下一个标签。
- 尝试将标签的其余部分转换为Unicode根据Puny代码[RFC3492号文件]. 如果转换失败和如果没有忽略无效Puny代码,记录出现错误,并且继续下一个标签。否则,更换原件转换结果在字符串中添加标签。
- 验证标签是否符合中的有效性标准章节4.1,有效性标准用于非过渡处理。如果任何有效性标准不满意,记录有错误。
- 如果标签没有开始带有“xn--”以下为:
- 验证标签是否符合章节4.1,有效性标准输入处理选项(过渡或非过渡性)。如果任何有效性标准不是满意,记录有错误。
任何输入域名称不记录错误的字符串具有已根据本规范成功处理。相反,如果输入域名称字符串导致错误,然后处理输入域名字符串失败。决定如何处理错误输入取决于调用方,而不是在本文件范围内。处理过程是幂等元对输出重新应用处理将不会进一步更改。有关示例,请参见表2,过渡时期的例子处理。
实现可以对结果进行进一步修改向用户显示时使用Unicode字符串。例如,它是建议将不允许的字符替换为U+FFFD使它们对用户可见。类似地,处理失败的标签在步骤4中,可以通过插入U+FFFD或其他视觉设备。
带有过渡或非过渡处理,验证Punycode中已有的源没有映射。尤其是包含偏差的Punycode字符,例如href=“xn-fu-hia.de"(对于fuß.de)未重新映射。这提供了一种机制,允许即使在过渡期间也明确使用偏差字符。
非空标签必须满足以下每个标准:
- 标签必须采用Unicode规范化表单NFC。
- 如果检查连字符,标签不能包含U+002D HYPHEN-MINUS字符在第三和第四位置。
- 如果检查连字符,标签不得以U+002D开头或结尾HYPHEN-MINUS字符。
- 如果没有检查连字符,标签不得以“xn--”开头。
- 标签不得包含U+002E(.)FULL STOP。
- 标签不得以组合标记开头,即:General_Category=标记。
- 标签中的每个代码点只能具有特定的状态根据第5节,印尼国家航空公司映射表以下为:
- 对于过渡处理(已弃用),每个值都必须有效的。
- 对于非过渡处理,每个值必须是有效的或偏离。
- 如果CheckJoiners(检查联接),标签必须满足ContextJ规则从附录A,在里面Unicode代码点和应用程序的国际化域名(IDNA)[IDNA2008年].
- 如果CheckBidi公司,如果域名是Bidi域名,则标签必须满足所有中的六个编号条件[IDNA2008年]RFC 5893,第2节。
前6个标准来自[IDNA2008年],除了第四个标准。尤其是准则#2旨在允许将来扩展xn以外的标签,例如将来IDNA版本。一些实现似乎考虑了这种扩展不太可能,并允许标签如“r3---sn-apo3qvuoxuxbt-j5pe”。
任何特定应用可以具有更严格的有效性标准,如中所述第3节,合规性。
如果UseSTD3ASCIIRules=假然后是有效性测试表Status值未提供ASCII字符,但依赖于实现。例如,如果实现允许字符[\u002Da-zA-Z0-9]
以及underbar(_),则需要使用表值对于UseSTD3ASCIIRules=假,并测试任何其他ASCII字符作为其有效性标准的一部分。这些ASCII字符字符可能来自映射:例如U+005F(_)低线(下栏)可能最初是U+FF3F(_)全宽低线。
当前没有带状态值不允许_STD3_valid。
此外,标签应满足从右向左的要求的右向左脚本文档中指定的字符[IDNA2008年]和中的CONTEXTJ要求协议文件[IDNA2008年]. 它是强烈建议Unicode技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode码技术标准39,Unicode安全机制 [UTS39标准]咨询交易信息带有易混淆的字符,以及应排除在外的字符标识符。请注意,建议的排除是中的那些[IDNA2008年].
ToASCII对应的操作[RFC3490协议]由以下步骤定义:
输入
- 一个有前途的人域名称表示为序列Unicode代码点的数量
- 布尔标志:检查连字符
- 布尔标志:CheckBidi公司
- 布尔标志:CheckJoiners(检查联接)
- 布尔标志:使用STD3ASCII规则
- 布尔标志:过渡_处理(已弃用)
- 布尔标志:验证DNS长度
- 布尔标志:忽略无效Puny代码
处理
- 到输入端域名称,应用处理步骤在里面第4节,处理,使用输入布尔标志过渡_处理,检查连字符,CheckBidi公司,CheckJoiners(检查联接)、和使用STD3ASCII规则。这可能会记录错误。
- 在U+002E FULL STOP将结果分成标签。
- 将每个带有非ASCII字符的标签转换为Punycode[RFC3492号文件]、和前缀为“xn--”。这可能会记录一个错误。
- 如果验证DnsLength标志为true,然后验证DNS长度限制。这可能会记录错误。有关更多信息,参见[STD13标准]和 [STD3标准].
- 域名的长度,不包括根标签它的点是从1到253。
- 每个标签的长度从1到63。
- 注:从技术上讲,完整的域名以DNS根目录的空标签(请参见[STD13标准] [RFC1034协议]第3节)。这个空标签和尾随的点几乎总是被省略。
- 什么时候?验证DnsLength为false,则传递空的根标签。
- 什么时候?验证DnsLength为true,则不允许空根标签。这与中的语法相对应[RFC1034协议]第3.5节首选名称语法它还定义了标签长度限制。
- 如果在步骤1-4中记录了错误,则操作失败,并返回失败值。不应进行DNS查找完成。
- 否则,使用U+002E FULL STOP作为分隔符,并返回结果。
建议实现对这些应用附加测试标签,如中所述Unicode技术报告#36、Unicode安全注意事项[UTR36标准]和Unicode技术标准#39,Unicode安全机制[UTS39标准],并采取适当的行动。例如,带有混合脚本或易混淆的标签可能在UI中调用。请注意,使用Punycode来发出信号如中所述,问题可能会适得其反[UTR36标准].
的ToUnicode对应的操作[RFC3490协议]由以下步骤定义:
输入
- 一个有前途的人域名称表示为序列Unicode代码点的数量
- 布尔标志:检查连字符
- 布尔标志:CheckBidi公司
- 布尔标志:CheckJoiners(检查联接)
- 布尔标志:使用STD3ASCII规则
- 布尔标志:过渡_处理(已弃用)
- 布尔标志:忽略无效Puny代码
处理
- 到输入端域名,应用处理步骤在里面第4节,处理,使用输入布尔标志过渡_处理,检查连字符,CheckBidi公司,CheckJoiners(检查联接)、和使用STD3ASCII规则。这可能会记录错误。
- 喜欢[RFC3490协议],这将永远生成转换后的Unicode字符串。与的ToASCII不同[RFC3490协议],这始终表明是否出现了一个错误。
建议实现对这些应用附加测试标签,如中所述Unicode技术报告#36、Unicode安全注意事项[UTR36标准]和Unicode技术标准#39,Unicode安全性机制 [UTS39标准],然后采取适当的行动。例如,带有混合脚本的标签或用户界面中可能会显示易混淆的内容。请注意如前所述,微小代码到信号问题可能会适得其反英寸[UTR36标准].
中指定的表第5节,印尼国家航空公司映射表也可用于的纯预处理步骤IDNA2008,将输入的Unicode字符串直接映射到IDNA2008中指定的算法。
IDNA2008的预处理规定如下:
应用第4.3节,到Unicode处理为Unicode字符串。
请注意,此预处理允许以下字符根据IDNA2008无效。然而,IDNA2008处理将抓住那些角色。例如,包含IDNA2008中被列为DISALLOWED的字符,例如U+2665(♥) 黑色HEART SUIT将顺利通过预处理步骤,但IDNA2008处理的后续应用程序将失败,并显示错误,表示根据IDNA2008。
可以对Unicode IDNA应用许多优化兼容性处理。这些优化可以改进性能,减少表大小,利用现有的NFKC转换机制等。例如:
- 有NFC登记入住第4.1节,有效性标准然而,它只是需要应用于从Punycode转换为Unicode输入步骤3。
- 进行大量有效性检查的简单方法章节4.1,有效性标准重新应用步骤1和2,并验证结果更改。
- 因为四个标签分隔符都映射到U+002E(完全停止第1步,的步骤3和4中的标签解析只需要检测U+002E(.)完全停止,而不是IDNA中定义的其他标签分隔符[RFC3490协议].
注意,输入域名称Unicode IDNA的字符串兼容性处理必须包含所有转义的Unicode代码点转换为Unicode代码点。例如,U+5341号机组
(十)CJK统一思想-5341本可以作为以下内容:
- 十;HTML数字字符引用(不符合项报告)
- \u5341型Javascript转义
- %E5%8D%81URI/IRI%转义
示例如所示表2,处理示例以下为:
表2。处理示例
输入 |
地图 |
规格化(Normalize) |
转换 |
验证 |
注释 |
Bloß.de公司 |
蓝色.de |
= |
不适用 |
好 啊 |
过渡性(已弃用):映射大写和sharp s |
布鲁德 |
= |
不适用 |
好 啊 |
非过渡性:映射大写 |
BLOẞ.de(博客) |
布鲁德 |
= |
不适用 |
好 啊 |
映射大写 |
xn-blo-7ka.de |
= |
= |
bloß.德 |
好 啊 |
Punycode未映射,因此ß永远不会更改(无论是否过渡)。 |
u¨.com网站 |
= |
ü.com网站 |
不适用 |
好 啊 |
规格化(Normalize)变化单位+元音变音到ü |
xn-tda.com网站 |
= |
= |
ü.com网站 |
好 啊 |
Puny代码xn—tda对的更改ü |
xn-u-ccb.com网站 |
= |
= |
u¨.com网站 |
错误 |
Punycode未映射,但是已验证。因为u+变音不是NFC,它失败了。 |
一个一com |
错误 |
错误 |
错误 |
错误 |
字符“О”是不允许的,因为它在映射时会生成一个点。 |
xn-a-ecp.ru |
xn-a-ecp.ru |
= |
a 1.ru(音译) |
错误 |
Puny代码xn—a-ecp=一个1.1,它失败了验证。 |
xn--0.pt |
xn--0磅 |
= |
错误 |
错误 |
Puny代码xn--0无效。 |
日本語。JP |
日本語.日本 |
= |
不适用 |
好 啊 |
重新映射全角字符,包括 |
☕.我们 |
= |
= |
不适用 |
好 啊 |
允许使用Post-Unicode 3.2个字符。 |
对于Unicode中的每个代码点,IDNA映射表提供了以下状态值之一:
- 有效的:代码点有效,但无效被改进的。
- 忽略:代码点被删除:这是相当于将代码点映射到空字符串。
- 映射:代码点在中被替换映射值的字符串。
- 偏离:代码点已映射或有效,取决于处理是过渡性的还是没有。
- 不允许:不允许使用代码点。
- 不允许_STD3_valid:状态为不允许的如果UseSTD3ASCIIRules=真(正常情况);实现允许UseSTD3ASCIIRules=假将代码点视为有效的。
- 不允许的_STD3_mapped:状态为不允许的如果UseSTD3ASCIIRules=真(正常情况);实现允许UseSTD3ASCIIRules=假将代码点视为映射。
如果此状态值为映射,不允许的_STD3_mapped或偏差,桌子也是提供该代码点的映射值。
从Unicode开始的每个Unicode版本都提供了一个表5.1,在下的版本化目录中[IDNA-表].每个Unicode标准版本的表将始终是向后兼容表的早期版本:仅具有Status值的字符不允许的可以状态或映射值的更改,例外情况如下:
- 作为反对过渡处理的一部分,Unicode 15.1中进行了以下异常更改:
- 在Unicode 15.1之前,U+1E9E大写夏普s(ẞ)是无条件地映射至“ss”,与过渡处理一致将U+00DF小尖头s(ß)也映射到“ss”。
- 自Unicode 15.1以来,使用非转换处理时,大写夏普s是映射到小尖头s,被视为有效的在非过渡处理下。这是表中新的映射值。
使用时过渡性的处理(已弃用),U+1E9E资本锐利(ẞ)继续映射到“ss”,就像偏离映射U+00DF小尖头(ß)。这是在处理过程中处理的。
Unicode 15.1还更改了三个有条件地-不允许的字符,这不是一个例外:
- Unicode 15.1之前,U+2260(≠)、U+226E(☑)和U+226F(≯)为不允许STD3_有效。
- 由于Unicode 15.1、U+2260(≠)、U+226E(☑)和U+226F(≯)有效的。
- 如果UseSTD3ASCIIRules=真,这相当于允许的变化从不允许的到有效的。
- 如果UseSTD3ASCIIRules=假,这实际上根本没有改变。
与IDNA2008表不同表被设计为应用于整个域名,而不仅仅是单个标签。该设计提供了IDNA2003处理标签分隔符的数量。特别是,该表的构造是为了禁止使用有问题的字符,例如U+2488(.1.)DIGIT ONE FULLSTOP,其分解包含一个“点”。
Unicode IDNA兼容性处理基于Unicode字符映射特性[NFKC_底座].第6节,映射表推导描述了这些表的派生。喜欢Unicode字符数据库中的派生属性,描述推导的信息。仅IDNA映射表中的数据是本规范应用的规范。
这些文件使用分号分隔的格式,类似于Unicode字符数据库[UAX44型]. 这个领域值列在表2b,数据文件字段以下为:
表2b。数据文件字段
号码 |
字段 |
描述 |
0 |
代码点 |
十六进制值或值范围。 |
1 |
状态 |
有效的,忽略,映射,偏离,不允许的,不允许_STD3_valid,或不允许的_STD3_mapped |
2 |
映射 |
十六进制值。仅当状态为忽略,映射,偏离,或不允许STD3_映射。 |
三 |
IDNA2008状态 |
有两个值:NV8型和十六。NV8型仅当状态为有效的但是IDNA2008将字符从所有域名中排除Unicode版本。十六当字符为IDNA2008排除了现在的Unicode版本。这些不是标准值。 |
例子:
0000..002C;不允许#NULL。。逗号
002D;有效#HYPHEN-MINUS
...
0041 ; 映射;0061#拉丁文大写字母A...00A1..00A7;有效;NV8#反向防爆标志..剖面标志
公元00年;忽略#SOFT HYPHEN...00DF;偏离;0073 0073#拉丁文小写字母尖S
...
19DA;有效;XV8#5.2新泰勒塔姆数字一号
...
下面描述映射表的派生。这个描述与中标签的实际映射无关章节4,处理。相反,本节描述了中表的派生第5节,印尼国家航空公司映射表。然后,该表被规范地用于映射章节4,处理。
推导过程描述为一系列步骤。第1步定义基本映射;步骤2,三、和4定义三组字符。第5步将修改基础根据需要映射或字符集以保持向后兼容性。映射和集合都用于第6步生成映射和表的状态值。第7步删除映射中包含无效字符的字符。每个都有编号步骤可能有子步骤:例如,步骤1包括步骤1.1至1.2。
计算进行两次,一次使用UseSTD3ASCIIRules=真,还有一次UseSTD3ASCIIRules=假.代码点那是不允许的具有UseSTD3ASCIIRules=真,但是有效的或映射具有UseSTD3ASCIIRules=假,被赋予特殊的状态值不允许_STD3_valid和不允许_STD3_mapped。
如果Unicode属性在未来版本中发生更改影响向后兼容性,将添加相应的子句到第5步维护兼容性。有关兼容性的更多信息,请参阅章节5,印尼国家航空公司映射表。
此步骤指定基本映射,它是来自的映射每个Unicode代码指向零个或多个代码点的序列。这个映射特定代码点C得到的值称为基本映射值of C。C的基本映射值可以是与C相同。
- 映射以下异常字符:
- 将标签分隔符字符映射到U+002E(.)FULL STOP:
- U+FF0E(.)全宽全停
- U+3002(.)思想完全停止
- U+FF61(“”)半深思想完全停止
- 将所有Bidi_Control字符映射到自身
- 将U+1E9E(ẞ)拉丁文大写字母SHARP S映射到U+00DF(ß)拉丁文小写字母尖S
- 映射每个其他将字符转换为其NFKC_Casefold值[NFKC_底座].
Unicode 6.3添加了不存在的Bidi_Control字符采用Unicode 3.2。为了维护IDNA2003禁止的意图Bidi_控制字符,而不仅仅是忽略它们,步骤1.1.b已添加。此步骤导致步骤6.3禁止所有Bidi_Control字符。
步骤1.1.b只影响Unicode 6.3中添加的5个新字符。它还将影响未来任何新的Bidi_Control字符标准的版本。
步骤1.1.c(在Unicode 15.1中添加)将大写sharp s(ẞ)映射到小写sharp s(ß),而不是映射到ss因为所有主要实现都采用了非转换处理,它不像NFKC_Casefold中那样将ß映射到ss。
基本有效集由添加和中的减法表3,底座有效集合该定义基于IDNA2003的原则。当应用于Unicode 3.2字符的曲目时生产出一套与IDNA2003紧密一致的产品。
表3。底座有效集合
形式集表示法 |
描述 |
\P{何时更改_NFKC_Casefold} |
以与其相等的字符开始[NFKC_底座]值。这个标准例如,不包括大写字母以及在NFKC规范化下不稳定,并且默认可忽略代码点。 注意,根据Perl/Java语法,\P表示\p、 所以这些角色不要更改时间根据单独映射[NFKC_底座]. |
+\u00DF |
添加拉丁文小写字母SHARP S(ß)。 |
-\p{c}-\p{z} |
删除未分配、控件、专用、格式、,代理和空白。 |
-\p{Block=象形文字描述字符} |
删除表意文字描述字符。 |
-\u31EF |
删除IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION。 这是在Unicode 15.1中添加的表意文字描述字符在现在填充的Ideographic_Description_Characters块之外。 |
-\p{ascii}+[\u002Da-zA-Z0-9] |
如果使用STD3ASCII规则=True:不允许删除ASCII;'-'有效。 |
+\p{ascii}-[\u002E] |
如果使用STD3ASCII规则=False:添加除用于“.” |
按以下方式形成基本排除集:
- 从空集开始。
- 添加每个代码点C,以便:
- 根据IDNA2003,C既不被禁止也不未指定或标签分隔符(即,它要么有效,要么映射),和
- 根据IDNA2003,C与C有不同的映射步骤1中指定的基本映射值。
- 添加每个代码点C,以便:
- 根据IDNA2003,C是被禁止的,和
- C位于基本有效集中,或者位于C的基本映射值位于基本有效集中。
例如,对于Unicode 5.2和6.0,基本排除集由以下列表组成。分目(如“案件变更”)是信息性的,不代表原则用于排除它们下面列出的字符。
中具有不同映射的字符IDNA2003(上述第3.2步)
- 案例更改
- U+04C0(Ӏ)CYRILLIC字母PALOCHKA
- U+10A0(Ⴀ)格鲁吉亚大写字母AN…U+10C5(Ⴥ)格鲁吉亚文大写字母HOE
- U+2132(Ⅎ)周转资金F
- U+2183(Ↄ)罗马数字反转一百
- 规范化更改(CJK兼容字符)
- U+2F868、U+2F874、U+2F 91F、U+2 F95F、U+2F9BF
- 默认可忽略更改
- U+3164悬挂填料
- U+FFA0半宽HANGUL填充物
- U+115F HANGUL CHOSEONG填料
- U+1160 HANGUL JUNGSEONG填料
- U+17B4 KHMER VOWEL内在AQ
- U+17B5 KHMER VOWEL内置AA
- U+1806(᠆)蒙古TODO软HYPHEN
IDNA2003中不允许的字符(上述第3.3步)
- Bidi_控制字符
- U+200E左右标记..U+200F左右标记
- U+202A从左到右嵌入。。U+202E从右到左OVERRIDE(超越)
- 不可见运算符
- 替换字符
- U+FFFC对象替换字符
- U+FFFD(?)替换字符
- 音乐符号
- U+1D173音乐符号开始光束。。U+1d117a音乐符号结束语
- 设置字符格式(已弃用)
- U+206A禁止对称交换。。U+206F标称数字形状
- 标签(已弃用)
- 其他标签
这是IDNA2003和IDNA2008。
- U+200C零宽非细木工
- U+200D零宽细木工
- U+00DF(ß)拉丁文小写字母尖S
- U+03C2()希腊小写字母最终SIGMA
此集合当前为空。上述设置的调整或如果这些步骤会导致已存在的字符以更改未来的状态或映射Unicode版本,以便保持向后兼容性。
对于每个代码点:
- 如果代码点位于偏离设置
- 状态为偏离和映射value是该代码点的基本映射值。
- 否则,如果代码点位于基排除集中或未分配
- 否则,如果代码点不是标签分隔符和其基映射值中的某些代码点在基中无效设置
- 否则,如果基础映射值为空字符串
- 否则,如果基本映射值与代码相同指向
- 否则,
- 状态为映射和映射value是该代码点的基本映射值。
处理完前面步骤中的所有代码点后:
- 遍历状态为的字符集映射。映射值不完全位于有效的设置和偏差套,制作不允许的。
- 反复应用这些操作,直到不再有状态更改。
例如,对于Unicode 15.1,字符集设置为在中不允许第7步包括以下内容:
注:U+2488(.1.)DIGIT ONE FULL STOP等字符是步骤6.3不允许。
注:在Unicode版本15.0及更早版本中,具有使用STD3ASCII规则=真此步骤中不允许使用其他三个字符:U+2260(≠)、U+226E(☑)和U+226F(≯)。这是基于包含字符的标准分解(NFD)在该设置下无效;该测试对于IDNA处理是不必要的。
表4,印尼国家航空公司Unicode 11.0的比较说明了三者之间的差异Unicode 11.0的有效字符库规范。它省略了ASCII代码库代码点,所有在Unicode 11.0中未分配的代码点,以及控制字符,私人使用字符和代理代码点。它还包括标签有效或映射的分隔符。该表分隔了Unicode3.2个字符,因为它们有一个特殊的IDNA2003中的状态。它还将UTS#46和IDNA2008的行为与他们行为不同的地方相同。
表中的每一行定义一个代码点桶在三个规范中共享行为模式。这个列提供以下信息:
- 标题为的列计数显示了每个桶中的字符。
- 标题为的列IDNA2003年,UTS46标准,和IDNA2008年显示中字符的状态每个铲斗对应的规格。
- 在过渡处理中修改偏差(已弃用),但非过渡处理中未修改;看见章节4,处理。
- IDNA2003允许在查找中使用未分配的代码点,但不允许注册。这些位于下表的部分“Unicode 4.0到Unicode 11.0”,并标记为查找有效。
- IDNA2008使用了几个分组的子类别一起比较。标记为的字符有效是IDNA2008*中的CONTEXTJ、CONTEXTO和PVALID。其他字符标记为不允许的。
*以下列表有效Unicode 4.0及更高版本的字符计算为字符与值CONTEXTJ、CONTEXTO和PVALID的联合在下面5.2版中的任何Unicode版本或更高版本。使用Unicode版本上有效字符的联合因为IDNA2008不保证向后不同版本Unicode的兼容性。
- 标题为的列注释和示例描述了规范之间的相关性,并提供了说明性字符。
表4。Unicode 11.0的IDNA比较
|
计数 |
IDNA2003年 |
UTS46标准 |
IDNA2008年 |
注释和示例 |
Unicode 3.2(IDNA2003=UTS46=IDNA2008) |
一 |
86,676 |
有效 |
有效 |
有效 |
在所有三种情况下都有效 U+00E0(a)拉丁语小带有GRAVE的字母A |
b条 |
431 |
不允许的 |
不允许的 |
不允许的 |
全部三项均不允许 U+FF01(!)全宽驱逐标记 |
Unicode 3.2(IDNA2003≠UTS46=IDNA2008) |
c(c) |
48 |
有效 |
不允许的 |
不允许 |
Unicode 3.2之后更改的映射 U+2132(Ⅎ)周转资本F |
d日 |
8 |
已映射 |
不允许的 |
不允许的 |
Unicode 3.2之后更改的映射 U+2F868(㛼)中日韓相容表意文字 |
Unicode 3.2(IDNA2003=UTS46≠IDNA2008) |
e(电子) |
4,640 |
映射/忽略 |
映射/忽略 |
不允许的 |
案例和兼容性变体,默认可忽略项 带GRAVE的U+00C0(ali)拉丁文大写字母A |
(f) |
3,254 |
有效 |
有效 |
不允许的 |
标点符号。。。 U+2665(B.3)黑色心形套装 |
克 |
4 |
映射/忽略 |
显示:有效 查找:映射/忽略 |
有效 |
偏差 U+200C零宽非细木工 U+200D零宽细木工 U+00DF(ß)拉丁文小写字母夏普S U+03C2()希腊小写字母最终SIGMA |
Unicode 4.0到Unicode 11.0(UTS46=IDNA2008) |
小时 |
36,045 |
查找有效 |
有效 |
有效* |
U+0221(ȡ)带卷曲的拉丁文小写字母D |
我 |
141 |
查找有效 |
不允许的 |
不允许的 |
U+0602()阿拉伯脚注标记 |
Unicode 4.0到Unicode 11.0(UTS46≠IDNA2008) |
j个 |
4,757 |
查找有效 |
有效 |
不允许的 |
U+2615(☕ ) 热饮料 |
k个 |
1,275 |
查找有效 |
映射/忽略 |
不允许的 |
带笔划的U+023A(Ⱥ)拉丁文大写字母A |
该表仅包括Unicode 11.0以下的计数。有关差异的详细在线列表,请访问[DemoIDNChars公司]和[DemoIDN公司].混淆性的含义可以在[DemoConf公司].
表4,印尼国家航空公司Unicode 11.0的比较也可以用于对实施者。
如果有任何字符在任何规范中映射/忽略-行(d)、(e)、(k)-然后在其他规范,它们在同样的方法,否则它们将被禁用。这可以防止域名在不同的浏览器上进行不同的映射:字符映射到相同的结果,否则它们不起作用。行(k)没有问题在这方面,假设注册中心遵循规格,因为像U+023A(Ⱥ)这样的字符不会在注册标签中有效。
注:过渡在实践中完成(g)行中的四个有问题的偏差。所有主要实现在UTS46中都将其视为Valid,就像在IDNA2008中一样。
这假定IDNA2008实现不使用自定义,不兼容的映射:也就是说,它们没有利用IDNA2008中允许任意映射的事实,并选择与IDNA2003或UTS#46不兼容的映射。这个属于(e)、(f)、(j)、(k)行中的任何一行。如果自定义映射是被任何重要的客户群使用,都会导致严重后果安全性和互操作性问题。有关更多信息,请参阅的[IDN_FAQ(标识_常见问题解答)].
除上述问题外,实施简单明了:
- 行(a)和(b)没有问题。所有三种规格行为一致。
- 行(c)和(d)没有问题。它们包含字符IDNA2003允许,但UTS#46不允许因为在基于Unicode 3.2之后,它们的映射会有所不同Unicode标准映射。这种治疗方法也与IDNA2008.这些映射在一段时间前就稳定了,所以映射未来不会改变;参见[稳定性].幸运的是,对Web内容的深入分析表明字符非常罕见:它们出现在网络域名中无法将页面与噪音区分开来(与偏差不同第(g)行中的字符)。
- 行(e)和(k)没有问题。理想情况下,实施将在IDNA2008中映射这些字符,生成完全相同的结果与UTS#46相同,Unicode 3.2的结果相同字符,如IDNA2003。
- 行(f)和(j)是符号和标点符号IDNA2008不允许,但UTS#46允许过渡。排(j) 包含以UTS#46处理的后Unicode 3.2字符根据IDNA2003原则。这些符号和标点符号将平稳过渡,因为注册中心停止了对它们的支持。
- 第(h)行和第(i)行没有问题。字符具有IDNA2008和UTS#46中的状态相同。
每个测试都提供了一个一致性测试文件(IdnaTestV2.txt)从Unicode 6.0开始的Unicode版本(版本控制)目录位于[IDNA-表]. 它只是为提供测试用例UseSTD3ASCIIRules=真。
测试文件是UTF-8,使用\易读性的uXXXX或\x{XXXX}约定。详细信息位于测试文件的标题中。
为了测试是否符合UTS#46,实现将执行toUnicode、toAsciiN和toAscii T对源字符串进行操作,然后验证结果字符串和相关的Status值。详细信息位于测试文件的标题中。
实现可能比UTS46的默认设置更严格。特别是,符合IDNA2008的实现将不允许对标记为NV8的行进行输入。实现只需要记录存在错误:它们不需要重现精确的状态代码(在删除任何忽略的状态值后)。
测试格式和文件名在版本11.0中进行了更改,因此它可以表示人们需要的各种不同的输入选项组合。新的格式允许测试实现通过过滤掉与不受支持的输入标志相对应的状态代码,精确地测试其支持标志组合的结果。值XV8也被删除,因为它在实践中用处不大。
以下说明了新旧格式之间的差异。这组示例并不详尽,但显示了如何为相同的示例提供更多信息。
旧格式采样线:
T;法新社;法新社;fass.de公司N;法新社;法新社;xn-fa-hia.deB类;Bücher.de;bücher.de;xn-断路器-kva.deB;■\u05D0;[B5 B6];【B5 B6】B类;a.、b;[A4_2];[A4_2]
新型采样线:
法新社;法新社;[]; xn-fa-hia.de;fass.de; Bücher.de;bücher.de;[]; xn-bcher-kva.de;■\u05D0;àא; [B5-B6];xn--0ca24w;ab;a.b;[A4_2];a.b;
为了便于对Unicode字符数据库的不同版本进行比较并强调添加新字符和更改字符属性的含义,Unicode技术委员会已准备好IDNA衍生财产的收集数据文件。这些数据文件永久发布在[IDNA-衍生].
对于从Unicode 6.1.0开始的每个Unicode标准版本,枚举的IDNA2008_Category属性的值被明确计算和列出在单独的数据文件中。此属性与RFC 5892中定义的“IDNA派生属性”匹配(请参见[IDNA2008年]).为方便实现者,提供了显式列表。它是执行的结果RFC 5892中定义的精确计算与发布同步每个版本的Unicode字符数据库。
RFC 5892给出了重写派生的代码点列表通过异常值。当数据文件已创建,但在IDNA协议的未来更新中添加了例外不可追溯应用。
这些IDNA派生属性数据文件的格式已建模与RFC 5892附录B.1中规定的内容相近,但注释除外每行的部分在第72列处不截断。例如,摘自RFC 5892:
007B。。00B6;禁用#左CURLY括号。。皮尔克罗标志00B7;contextto#中间点00B8..00DE;不允许的#CEDILLA。。拉丁文大写字母THORN00DF。。00F6;PVALID#拉丁文小写字母SHARP S.拉丁文小字母LETT
比较从数据文件中摘录的相同范围:
007B。。00B6;禁用#左CURLY括号。。PILCROW标志00B7;上下文#中间点00B8..00DE;禁用#CEDILLA。。拉丁文大写字母THORN00DF。。00F6;PVALID#拉丁文小写字母SHARP S.拉丁文大写字母O
这种格式上的紧密匹配旨在简化脚本unicode.org上发布的这些IDNA派生属性数据文件之间的比较以及其他基于RFC 5892的现有计算列表张贴在IANA或其他地方。
马克·戴维斯(Mark Davis)和米歇尔·希格纳德(Michel Suignard)是这篇文章的主要作者文件,在Unicode技术委员会的指导下。对于他们对本规范的想法或文本的贡献编辑们感谢朱莉·艾伦、马蒂亚胡·阿洛奇、彼得·康斯特布尔、克雷格卡明斯、马丁·德斯特、彼得·埃德伯格、阿斯穆斯·弗雷塔格、黛博拉·戈德史密斯、劳伦蒂乌伊恩库、格瓦西·马卡姆、西蒙·蒙塔古、丽莎·摩尔、埃里克·穆勒、,Simon Sapin、Murray Sargent、Markus Scherer、,Jungshik Shin、Shawn Steele、Erik van der Poel、Chris Weber和Ken惠斯勒。规范建立在[IDNA2008年],在IETF Idna-更新工作组中开发,特别是Matitiahu Allouche、Harald Alvestrand、Vint Cerf、,Martin J.Dürst、Lisa Dusseault、Patrik Fältström、Paul Hoffman、Cary卡普(Karp)、约翰·克伦辛(John Klensin)和彼得·莱斯尼克(Peter Resnick),以及[IDNA2003年],作者:Marc Blanchet,Adam科斯特洛、帕特里克·菲利斯特罗姆和保罗·霍夫曼。
以下总结了之前的修改本文档的发布版本。
第31次修订
- 重新发布对于Unicode 15.1。
- 的过渡处理偏离字符现在已弃用。所有主要实现都使用非转换处理。这反映在本文档中的几个更改中。
- 已更改第6节映射表派生将U+1E9E大写尖s映射到U+00DF小写尖s(而不是ss)通过为U+1E9E添加基本映射,将U+00DF添加到基本有效集,并允许在映射中使用偏差字符。
- 已更改第6节步骤7:生成最终状态和映射值不再检查NFD有效性。在映射表中,这改变了U+2260(≠)、U+226E(≯)和U+226F(≯从disallowed_STD3_valid到valid。
- 已更改第四节处理步骤1.地图不再为不允许的字符记录错误。在规范化之前和之后检查不允许的字符非规范化文本与规范化文本的结果不一致,随着前一项中的更改而变得可见(例如,≠vs.等号加组合覆盖)。
- 已更改第四节处理步骤1.地图有条件地将U+1E9E资本夏普映射为“ss”如果过渡_处理(现已弃用)。
- 已更改第4.1节有效性标准仅适用于非空标签。
- 在4.1中增加了一个附加条件有效性标准不允许标签,例如xn——xn——epa.,不往返。
- 添加了标志忽略无效Puny代码,它使标签xn-a.com网站有效。这允许遵循常见行业惯例的全ASCII快速路径。
- IdnaTestV2.txt中的错误修复:当标签既不是LTR标签也不是RTL标签时,然后它没有通过B1测试,但没有其他Bidi测试。
先前版本的修改在相应版本中列出。
©2023 Unicode,Inc.保留所有权利。这个Unicode Consortium不对任何并且对错误或遗漏不承担任何责任。无责任承担与此相关的附带和间接损害信息或程序的使用或由此产生的包含或随附本技术报告。Unicode码使用条款适用。
Unicode和Unicode徽标是商标Unicode,Inc.,并在某些司法管辖区注册。