网址可以包含UTF-8字符吗?

时间:2014-03-12 16:14:38

标签: url utf-8 character-encoding ascii url-encoding

我很好奇我是否应该用ASCII或UTF-8编码网址。我认为网址不能包含非ASCII字符,但是有人告诉我他们可以使用UTF-8,我搜索过并且无法找到哪一个是真的。有谁知道吗?

1 个答案:

答案 0 :(得分:4)

这有两个部分,但它们都是“是”。

使用IDNA,可以使用完整的Unicode指令(使用一些小的曲目来注册域名)来防止歧义和滥用。

路径部分没有严格规定,但可以在路径中编码任意字符串。浏览器可以选择显示人类可读的渲染而不是编码路径。但是,这需要启发式,因为无法指定路径的字符集和编码。

因此,http://xn--msic-0ra.example/mot%C3%B6rhead是一个(虚构的例子,不完全正确)计算机可读编码的URL,可以http://müsic.example/motörhead显示给用户。域名在名为Punycode的东西中编码为xn--msic-0ra.example,路径包含编码为UTF-8和URL编码的标签“motörhead”(Unicode代码点U+00F6用两个字节0xC3表示UTF-8中的0xB6。

路径也可以是mot%F6rhead,它与Latin-1中的标签相同。在这种情况下,推导出合理的人类可读表示会更加困难,但也许周围人物的上下文可以提供足够的提示来进行良好的猜测。

孤立地,%F6几乎可以是任何东西,%C3%B6可以是例如{{1}}。 UTF-16。