我应该假设URL中的编码字符是什么字符集?

时间:2008-09-26 16:28:20

标签: url

RFC 1738指定了网址的语法,并提到了

  

网址仅与图片一起编写   可打印的字符   US-ASCII编码字符集。该   八位字节80-FF十六进制不是
  用于US-ASCII和八位字节00-1F   和7F十六进制代表
  控制字符;这些必须是   编码。

然而,它并没有说明这些八位字节代表的代码集。

RFC 2396似乎试图改善这种情况,但是:

  

对于原始字符序列   包含非ASCII字符,但情况更多   难。传输八位位组序列的Internet协议   表示字符序列有望提供某种方式   识别所使用的字符集,如果可能存在多个字符集   [RFC2277]。但是,目前没有任何条款   用于完成此标识的通用URI语法。个人URI   scheme可能需要单个字符集,定义默认字符集,或   提供一种表明所用字符集的方法。

     

预计对URI内的字符编码进行系统处理   作为该规范的未来修改而开发。

客户端是否有任何明确的方式可以确定哪个字符集可以解释编码的八位字节,或者服务器可以确定客户端用来编码的内容?

在我看来,大多数服务器默认使用UTF-8,但这似乎是一个事实上的选择而不是指定的。

2 个答案:

答案 0 :(得分:12)

根据您的引用,网址是ASCII。就是这样。

URI OTOH,允许更大的字符集;通常是你自己说的UTF-8。

需要记住的是URL是URI的子集。因此,真正的问题是,您在浏览器中编写的是哪一个?

我猜你可以写一个URI,浏览器应该尽力转换为URL(这是HTTP / 1.1支持,AFAICR)。对于非ASCII字符,这意味着十六进制代码,通常编码为UTF-8。

答案 1 :(得分:4)

我相信您正在寻找的规范是RFC 3987,它描述了IRI - 国际化资源标识符。