【问题标题】:What character set should I assume the encoded characters in a URL to be in?我应该假设 URL 中的编码字符在什么字符集中?
【发布时间】:2010-09-13 12:33:28
【问题描述】:

RFC 1738 指定 URL 的语法,并提及

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

但是,它没有说明这些八位位组代表什么代码集。

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

对于原始字符序列, 包含非 ASCII 字符,然而,情况更多 难的。用于传输八位字节序列的 Internet 协议 表示字符序列有望提供某种方式 识别使用的字符集,如果可能有多个 [RFC2277]。但是,目前《条例》中并没有规定 通用 URI 语法来完成此标识。单个 URI 方案可能需要单个字符集,定义默认字符集,或 提供一种方法来指示所使用的字符集。

预计 URI 中字符编码的系统处理将是 作为本规范的未来修改而开发的。

是否有任何明确的方式可以让客户端确定使用哪个字符集来解释编码的八位位组,或者服务器可以通过哪种方式确定客户端使用什么进行编码?

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

【问题讨论】:

    标签: url


    【解决方案1】:

    根据您的报价,URL 是 ASCII。就是这样。

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

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

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

    【讨论】:

    • URL 是不透明的标识符,没有字符编码,不透明的标识符可以被认为是二进制字符串,只对目标主机有意义。如果目标主机愿意,它可以应用 URL 数据的字符集解释。这意味着客户端无法控制含义或字符集,也无法表达选择,因为 URL 的解释 100% 是服务器的事情。因此,要回答原始问题,您不能假设任何字符集都是特定于服务器实现的,因此请询问服务器管理员。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2010-10-27
      • 1970-01-01
      • 2011-01-28
      • 2013-09-16
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多