什么是Unicode?
Unicode是用于在大多数世界书写系统中一致编码、表示和处理文本的通用计算标准。在域名行业中,Unicode通过包含非拉丁字符 (如中文、阿拉伯语、西里尔文和其他脚本) 的国际化域名 (IDN) 实现。Unicode为每个字符跨所有语言分配唯一的代码点,确保跨不同系统的一致表示。Unicode在域名中
IDN支持
Unicode使以下域名成为可能:
- 例え.jp (日语)
- مثال.مصر (阿拉伯语)
- пример.рф (俄语西里尔文)
- 例子.中国 (中文)
Punycode转换
DNS使用ASCII,所以Unicode域名转换为Punycode:
Unicode:münchen.de
Punycode:xn--mnchen-3ya.de
Unicode:北京.中国
Punycode:xn--1lq90i.xn--fiqs8s
Unicode代码点
结构
格式:U+XXXX (十六进制)
示例:
A = U+0041 (拉丁A)
а = U+0430 (西里尔a)
中 = U+4E2D (中文字符)
字符块
| 块 | 范围 | 脚本 |
|---|---|---|
| 基本拉丁 | U+0000-007F | 英文/ASCII |
| 西里尔 | U+0400-04FF | 俄语等 |
| 阿拉伯 | U+0600-06FF | 阿拉伯语 |
| CJK | U+4E00-9FFF | 中文/日文/韩文 |
安全考虑
同形体攻击
来自不同脚本的看起来相似的字符:
拉丁 'a' (U+0061) 对 西里尔 'а' (U+0430)
拉丁 'o' (U+006F) 对 西里尔 'о' (U+043E)
攻击:аpple.com (西里尔'а') 看起来像 apple.com
浏览器保护
浏览器可能会对可疑的混合脚本域名显示Punycode。
Unicode规范化
表示相同字符的不同方式:
é = U+00E9 (预合成)
é = U+0065 + U+0301 (分解:e + 结合重音)
规范化形式:NFC, NFD, NFKC, NFKD
Unicode对全球互联网可访问性至关重要,使世界各地的用户能够用本地脚本和语言注册和访问域名。