为何要多此一举,对信息进行编码?
由于一些网络通讯协议的限制, 又或者是出于信息加密的目的, 我们就需要将原信息转换为 base64 编码,然后才能进行传输。
要如何操作?
通常的方法是通过
window.btoa()
方法对源数据进行编码, 然后接收方使用window.atob()
方法对其进行解码,从而得到原数据。注意:方法中的
b
字母不是base64
的缩写,a
字母才是表示的base64
,别被蒙了。
这种方法好使吗,会不会有什么问题?
很悲惨,这种方法存在的问题是:
window.btoa()
不支持中文,window.atob()
转换含有中文的base64
编码的时候中文部分会变为乱码。
还有救吗?
不能因噎废食,虽然对中文支持的不好,但是我们用下面的方法变通一下,就可以完美支持中文了。
function utf8_to_b64(str) { return window.btoa(unescape(encodeURIComponent(str))); } function b64_to_utf8(str) { return decodeURIComponent(escape(window.atob(str))); }