使用场景:后台传来经过base64编码的字符串(含有中文), 需要在前端进行解码。
代码一:
1 2 3
| getUserName: (str) => { return decodeURIComponent(atob(str)) },
|
bug:中文解码后,出现乱码。
原因:js中的atob函数(拉丁字符集)不支持unicode字符集。
解决:
1 2 3
| getUserName: (str) => { return decodeURIComponent(escape(atob(str))); },
|
- 使用escape对拉丁字符串进行编码,将拉丁字符集翻译成对应的十六进制符号;
- 使用decodeURIComponent(utf-8字符集)解析,把十六进制符号翻译成utf-8字符集中对应的字符!
1 2 3 4 5 6 7 8
| // 使用utf-8字符集进行base64编码 function utoa(str) { return btoa(unescape(encodeURIComponent(str))); } // 使用utf-8字符集解码base64字符串 function atou(str) { return decodeURIComponent(escape(atob(str))); }
|