多年来,通过阅读不断发展的规范,我认为RFC 3986最终确定了转义八位字节序列的 UTF-8 编码。也就是说,如果我的 URI 有,%XX%YY%ZZ
我可以采用解码后的八位字节序列(对于方案特定部分中的任何 URI)并将结果字节解释为 UTF-8,以找出解码后的信息是什么意思。实际上,我可以调用 JavaScriptdecodeURIComponent()
来自动为我进行解码。
然后我阅读了data:
URI规范RFC 2397,其中包含一个charset
参数,该参数(自然)指示编码数据的字符集。但这是如何工作的?%XX%YY
如果我的data:
URI 中有两个八位字节编码的序列,是否charset=iso-8859-1
表明这两个解码的八位字节不应被解释为 UTF-8 序列,而应解释为两个单独的拉丁字符(因为 ISO-8859-1 中的每个字节代表一个人物)?RFC 2397 似乎表明了这一点,因为它给出了“希腊 [原文] 字符”的示例:
data:text/plain;charset=iso-8859-7,%be%fg%be
但这意味着 JavaScript decodeURIComponent()
(假定 UTF-8 编码的八位字节)不能用于从数据 URI 中提取字符串,对吗?这是否意味着如果字符集是 UTF-8 以外的字符集,我必须为数据 URI 创建自己的解码?
此外,这是否意味着 RFC 2397 现在与 RFC 3986 冲突,这似乎表明假定了 UTF-8?还是 RFC 3986 仅引用“新的 URI 方案 [s]”,这意味着data:
URI 方案得到了继承,并且有自己的技术来指定编码八位位组的含义?
目前我最好的猜测是data:
它按照自己的规则播放,如果它表示 UTF-8 以外的字符集,我将不得不使用decodeURIComponent()
JavaScript 以外的其他字符集。任何关于替换方法的建议也将受到欢迎。