如何在JavaScript中将UTF8字符编码为Base64

3

在处理中文时,我尝试了这样的方式,但输出结果是乱码:

var a = "你好";
undefined
a
"你好"
a = unescape(encodeURIComponent(a));
"ä½ å¥½"
a
"ä½ å¥½"

与处理英文相比:

var a = "Hello";
undefined
a
"Hello"
a = unescape(encodeURIComponent(a));
"Hello"

这是我的全部代码:

var content = $("div#test").html();
content = unescape(encodeURIComponent( content ));
content = window.btoa(content);
content = "data:image/svg+xml;filename:{{ request.session.access_token.uid }}.svg;base64," + content;

更新:

我想要做的是将生成的SVG编码为数据URL,以供用户下载。我通过首先将SVG转换为画布(使用CanVG),然后使用html2canvas生成base64解决了这个问题……最终它起作用了……


你的输出与代码有什么关联? - undefined
输出结果混乱的代码是什么意思? - user663031
请查看https://developer.mozilla.org/en-US/docs/DOM/window.btoa 获取有关编程的内容。 - undefined
@Antony:首先,这不是“我的”。从我所看到的情况来看,该页面上的两个函数对于OP的输入都能正常工作。 - undefined
1
尝试往返转换这个,并且你会看到它正常工作:decodeURIComponent(escape(unescape(encodeURIComponent("東京")))) "東京",即使中间结果看起来像是有趣的字符——因为它确实是有趣的字符。 - user663031
显示剩余5条评论
1个回答

4

尝试往返转换此内容,它可以正常工作:

decodeURIComponent(escape(window.atob(window.btoa(unescape(encodeURIComponent("‌​東京"))))))

某个中间结果是否出现乱码是不相关的。

window.btoa(decodeURIComponent(escape(unescape(encodeURIComponent("東京"))))) 这段代码存在问题,因为函数调用不平衡且顺序不正确。


您的答案在Chrome中没有出现错误。但我想要的是通过window.btoa(unescape(encodeURIComponent("東京")))提供的base64,当打开base64数据URL时,Chrome无法正确识别。 - undefined
谢谢,这似乎是我迄今为止找到的最简单的解决方案。我将进一步尝试它。 http://jsfiddle.net/gfjsycqd/ - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接