在Google Chrome中指定Blob编码

问题描述 投票:12回答:2

以下代码(经过标准化的供应商)可以正常工作,并且在Firefox 8中显示为“➀➁➂Test”,但在Google Chrome中显示为“âžTest”。除了使用文件系统API将文件写入临时文件系统之外,还有什么方法可以保留Google Chrome中的Blob编码?

var b = new Blob(["➀➁➂ Test"], {type: "text/plain;charset=UTF-8"});
var url = URL.createObjectURL(b);
open(url);
javascript google-chrome encoding fileapi
2个回答
10
投票

Gecko(Firefox),WebKit(Safari,Chrome)和Opera支持非标准btoa函数,用于在base 64中编码字符串。要获取base 64字符串,其中包含编码为UTF-8的字符串,您需要使用encodeURIComponent-unescape技巧。 encodeURIComponent将字符串编码为UTF-8 URL,但unescape将每个%xx解码为单个字符。 btoa期望使用任何所需编码的二进制字符串。

var base64 = btoa(unescape(encodeURIComponent(data)));
window.open("data:text/plain;charset=UTF-8;base64,"+base64,"UTF-8 Text");

当然,这在IE中不起作用,但是我认为IE 10将支持Blob -API。谁知道它将如何处理编码。

PS:IE似乎无法window.open data:-url,并且无论如何都会有可笑的小URL长度限制。

PPS:这在Chrome中对我有效:

var b = new Blob(["➀➁➂ Test"],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"});
var url = URL.createObjectURL(b);
window.open(url,"_blank","");

0
投票

问题是Chrome中新标签页的默认页面编码。当新窗口打开时(在window.open(url)之后),从Chrome菜单中选择“视图”>“编码”>“ Unicode”。这将在Chrome 13中为我将显示的文本从“测试”更改为“测试”。

[如果您希望使用一种解决方案,无论使用哪种默认编码,都可以在新窗口中打开Blob,那么您可以依靠以下事实:如果iframe中的文档未明确指定其自身,则会继承父文档的编码编码。因此,您可以打开一个带有Content-Type:text/html; charset=utf-8标头的空白HTML文档的窗口,然后将iframe附加到主体,并将src属性设置为Blob URL。

© www.soinside.com 2019 - 2024. All rights reserved.