目前我有一个大的JavaScript字符串,我试图写入一个文件,但采用不同的编码(ISO-8859-1).我希望使用像downloadify这样的东西.Downloadify只接受普通的JavaScript字符串或base64编码的字符串.
因此,我决定使用JSZip压缩我的字符串,它生成一个很好的base64编码字符串,可以传递给downloadify,然后下载到我的桌面.好哇!问题是我压缩的字符串当然仍然是错误的编码.
幸运的是,JSZip可以将Uint8Array作为数据而不是字符串.那么有没有办法将JavaScript字符串转换为ISO-8859-1编码的字符串并将其存储在Uint8Array中?
或者,如果我接近这一切都错了,那么一起有更好的解决方案吗?是否有一个花哨的JavaScript字符串类可以使用不同的内部编码?
编辑:为了澄清,我不是将这个字符串推送到网页,所以它不会自动转换为我.我正在做这样的事情:
var zip = new JSZip();
zip.file("genSave.txt", result);
return zip.generate({compression:"DEFLATE"});
Run Code Online (Sandbox Code Playgroud)
为此,我需要使用正确的编码结果(而JSZip只需要字符串,数组缓冲区或uint8arrays).
最终编辑(这不是一个重复的问题,因为结果没有在浏览器中显示或传输到可以更改编码的服务器):
事实证明这比我想象的要模糊一些,所以我最终推出了自己的解决方案.它不像正确的解决方案那样强大,但它会将JavaScript字符串转换为windows-1252编码,并将其粘贴在Uint8Array中:
var enc = new string_transcoder("windows-1252");
var tenc = enc.transcode(result); //This is now a Uint8Array
Run Code Online (Sandbox Code Playgroud)
然后你可以像我一样在数组中使用它:
//Make this into a zip
var zip = new JSZip();
zip.file("genSave.txt", tenc);
return zip.generate({compression:"DEFLATE"});
Run Code Online (Sandbox Code Playgroud)
或者使用此字符串编码库将其转换为windows-1252编码的字符串:
var string = TextDecoder("windows-1252").decode(tenc);
Run Code Online (Sandbox Code Playgroud)
要使用此功能,请使用:
<script src="//www.eu4editor.com/string_transcoder.js"></script>
Run Code Online (Sandbox Code Playgroud)
或包括:
function string_transcoder (target) {
this.encodeList = encodings[target];
if (this.encodeList === undefined) {
return undefined;
}
//Initialize the easy encodings …
Run Code Online (Sandbox Code Playgroud)