Gecko (Firefox), WebKit (Safari, Chrome) и Opera поддерживают нестандартную функцию btoa
для кодирования строки в base 64. Чтобы получить строку base 64, содержащую строку, закодированную как UTF-8, необходимонужно использовать трюк encodeURIComponent
- unescape
.encodeURIComponent
кодирует строку как URL UTF-8, но 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: -urls и в любом случае будет иметь смешное ограничение на длину 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","");