Utf 8 数据URI中的字符集

Utf 8 数据URI中的字符集,utf-8,character-encoding,uri,url-encoding,rfc,Utf 8,Character Encoding,Uri,Url Encoding,Rfc,在阅读不断发展的规范的几年中,我一直认为最终确定了逃逸八位组序列的UTF-8编码。也就是说,如果我的URI具有%XX%YY%ZZ,我可以获取解码的八位字节序列(对于方案特定部分中的任何URI),并将结果字节解释为UTF-8,以了解解码信息的用途。实际上,我可以调用JavaScriptdecodeURIComponent(),它会自动为我进行解码 然后我阅读了数据的规范:uri,它包括一个字符集参数,它(自然地)指示编码数据的字符集。但这是怎么回事?如果在我的数据:URI中有一个两个八位字节编码的

在阅读不断发展的规范的几年中,我一直认为最终确定了逃逸八位组序列的UTF-8编码。也就是说,如果我的URI具有
%XX%YY%ZZ
,我可以获取解码的八位字节序列(对于方案特定部分中的任何URI),并将结果字节解释为UTF-8,以了解解码信息的用途。实际上,我可以调用JavaScript
decodeURIComponent()
,它会自动为我进行解码

然后我阅读了
数据的规范:
uri,它包括一个
字符集
参数,它(自然地)指示编码数据的字符集。但这是怎么回事?如果在我的
数据:
URI中有一个两个八位字节编码的序列
%XX%YY
,那么
charset=iso-8859-1
是否表示两个解码的八位字节不应解释为UTF-8序列,而应解释为两个单独的拉丁字符(因为iso-8859-1中的每个字节代表一个字符)?RFC 2397似乎表明了这一点,因为它给出了一个“希腊文[sic]字符”的示例:

但这意味着JavaScript
decodeURIComponent()
(假设UTF-8编码的八位字节)不能用于从数据URI提取字符串,对吗?这是否意味着如果字符集不是UTF-8,我必须为数据URI创建自己的解码

此外,这是否意味着RFC 2397现在与RFC 3986发生冲突,这似乎表明假设使用UTF-8?还是RFC 3986只引用了“新的URI方案”,这意味着
数据:
URI方案得到了扩展,并且有自己的技术来指定编码的八位字节的含义


目前我最好的猜测是,
data:
按照自己的规则运行,如果它表示UTF-8以外的字符集,我将不得不在JavaScript中使用
decodeURIComponent()
以外的其他内容。关于替换方法的任何建议都是受欢迎的。

请记住,
数据:
URI方案描述的资源可以被认为是一个文件,它由不透明的bytestream组成,就像它是
http:
URI(与bytestream相同,但存储在http服务器上)或
ftp:
URI一样(相同的bytestream,但存储在FTP服务器上)或
文件:
URI(相同的bytestream,但存储在本地文件系统上)。只有附加到文件的元数据才具有bytestream的含义

RFC2397给出了一个关于如何将这个bytestream嵌入URI本身的明确规范(与其他URI方案不同,在其他URI方案中,URI给出了关于从何处获取bytestream的指令,而不是它包含什么)。它可能是base64,也可能是RFC中给定的百分比编码方法。如果ByTestStream包含man非ASCII字节,则base64将更加紧凑


数据:
URI还描述了它自己的内容类型,它给出了ByTestStream的预期解释。在这种情况下,由于您使用了
文本/plain;charset=iso-8859-7
,因此字节必须正确编码为iso-8859-7文本。字节肯定不会被确定为UTF-8或任何其他字符编码。它将e使用您指定的字符编码进行明确解码。

但假设您将其传输到网页。.网页如何知道不透明在
text/plain;charset=iso-8859-7,不透明
?因此,在使用iso-8859-7进行解码之前,应首先使用HTTP标头声明的UTF-8对其进行解码.
data:text/plain;charset=iso-8859-7,%be%fg%be