来自数据uri的多字节unicode解码错误

我最近在使用html数据URI时遇到问题:

我的源html包含字符ā,当直接加载html时,该字符正确显示。但是,当html转换为数据URI时,该字符改为呈现为Ä

在仔细研究了结果URI之后,我发现该字符已被编码为%c4%81,但这似乎是ā的正确URI编码。

我什至尝试将数据URI转换为base64,但是遇到了同样的问题。 Chrome和Safari都可能发生这种情况。

我想知道在数据URI中对多字节unicode字符进行编码是否存在问题,因为ā当前是我的html中唯一的多字节字符。

console.log(encodeURIComponent('ā'));

// https://stackoverflow.com/questions/23223718/failed-to-execute-btoa-on-window-the-string-to-be-encoded-contains-characte
console.log(btoa(unescape(encodeURIComponent('ā'))));
<iframe src="data:text/html,%c4%81"></iframe>
<iframe src="data:text/html;base64,xIE="></iframe>

libailiang 回答:来自数据uri的多字节unicode解码错误

使用文本数据URI(最常见的是UTF-8)时,您需要指定字符编码。

如果您只向哑剧类型添加;charset=UTF-8声明,浏览器将正确解码该字符。

<iframe src="data:text/html;charset=UTF-8,%c4%81"></iframe>
<iframe src="data:text/html;charset=UTF-8;base64,xIE="></iframe>

本文链接:https://www.f2er.com/3120807.html

大家都在问