url 可以有 UTF-8 字符吗?
Posted
技术标签:
【中文标题】url 可以有 UTF-8 字符吗?【英文标题】:Can urls have UTF-8 characters? 【发布时间】:2014-04-16 22:35:04 【问题描述】:我很好奇是否应该使用 ASCII 或 UTF-8 对 url 进行编码。我认为 url 不能有非 ASCII 字符,但有人告诉我他们可以有 UTF-8,我四处搜索,找不到哪个是真的。有人知道吗?
【问题讨论】:
Unicode characters in URLs 的可能重复项 【参考方案1】:这有两个部分,但它们都等于“是”。
使用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 0xB6 表示UTF-8)。
路径也可以是 mot%F6rhead
,这与 Latin-1 中的标签相同。在这种情况下,推断出一个合理的人类可读表示会困难得多,但也许周围字符的上下文可以提供足够的提示来进行良好的猜测。
单独来看,%F6
几乎可以是任何东西,%C3%B6
可以是例如UTF-16。
【讨论】:
当你写“UTF-8”时,你可能指的是“Unicode”。不管怎样,这并没有从根本上改变我的答案。 实际上它们都等于“否”。域和 URL 都不能包含任何非 ASCII 字符。 然而,存在将任意字符编码为 ASCII(百分比编码和 punycode)的方法... +1 @deceze (-: 嗯,是的。规范 URL 不包含 Unicode。但 IDNA 的努力尤其是关于定义和启用对人类友好的半规范表示。跨度> 另外一个细节是url参数内容可以是url-encoded unicode utf-8。发生的情况是在发出 http 请求之前,参数数据是 url 编码的,无论是完整的 url 还是参数数据。像查询语法元素一样?和 & 已经是 ascii,只有参数数据会被编码触及。度数符号 ° 是 ASCII 0xB2,但将 C2 B2 转换为 UTF-8 ***.com/a/8732093/4299943。未编码° 1 字节将导致 ?并且仅发送 %B2 结果为 �,除非服务器未解码单字节 Windows-1252。 w3schools.com/tags/ref_urlencode.ASP @flodis 这不是简单地重申答案中已经存在的信息吗?无论如何,可能不要使用 w3schools 作为您的参考。以上是关于url 可以有 UTF-8 字符吗?的主要内容,如果未能解决你的问题,请参考以下文章
Encode::Guess 可以从 iso-8859-1 中分辨出 utf-8 吗?