Gecko (Firefox), WebKit (Safari, Chrome) and Opera support the non-standard btoa
function for encoding a string in base 64. In order to get a base 64 string containing a string encoded as UTF-8 you need to use the encodeURIComponent
-unescape
trick. encodeURIComponent
encodes a string as UTF-8 URL but unescape
decodes each %xx
as a single character. btoa
expects a binary string of whatever encoding you want.
var base64 = btoa(unescape(encodeURIComponent(data)));
window.open("data:text/plain;charset=UTF-8;base64,"+base64,"UTF-8 Text");
Of course this does not work in IE, but I think IE 10 will support the Blob
-API. Who knows how it will handle encodings.
PS: IE seems not to be able to window.open
data:-urls and would have a ridiculous small url length limitation anyway.
PPS: This works for me in Chrome:
var b = new Blob(["??? Test"],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"});
var url = URL.createObjectURL(b);
window.open(url,"_blank","");
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…