猿问

无法在“窗口”上执行“ btoa”:要编码的字符串包含Latin1范围之外的字符。

根据我的测试,标题中的错误仅在Google Chrome中引发。我正在对一个大的XML文件进行base64编码,以便可以下载它:


this.loader.src = "data:application/x-forcedownload;base64,"+

                  btoa("<?xml version=\"1.0\" encoding=\"utf-8\"?>"

                  +"<"+this.gamesave.tagName+">"

                  +this.xml.firstChild.innerHTML

                  +"</"+this.gamesave.tagName+">");

this.loader 隐藏的iframe。


这个错误实际上是一个很大的变化,因为通常,谷歌浏览器会在btoa通话时崩溃。Mozilla Firefox在这里没有问题,因此问题与浏览器有关。我不知道文件中有任何奇怪的字符。实际上,我确实相信没有非ASCII字符。


问: 如何找到有问题的字符并替换它们,以使Chrome不再抱怨?


我试图使用Downloadify来启动下载,但是它不起作用。这是不可靠的,不会抛出任何错误以进行调试。


弑天下
浏览 608回答 3
3回答

白板的微信

使用btoa与unescape和encodeURIComponent我没有工作。用XML / HTML实体替换所有特殊字符,然后转换为base64表示形式是为我解决此问题的唯一方法。一些代码:base64 = btoa(str.replace(/[\u00A0-\u2666]/g, function(c) {&nbsp; &nbsp; return '&#' + c.charCodeAt(0) + ';';}));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答