【JS笔记】浏览器window.atob来进行Base64解码后英文正常,中文乱码如何解决?
先来一段废话:
由于现在高级编程语言底层都是英文写的,国内程序员都会遇到转码后中文乱码的问题
不管是项目文件编码不一致,或者是字符串加密转换都可能存在,这是因为英文和中文字节长度不一样需要转换,且中文编码有多个导致的,
中文常见的有GBK(含多个版本),uft8(含多个版本),我们国内常用的是uft8和GBK两种。。。。。
在尝试了几个方法转码后无果,在通过百度大法一顿搜索后,找到了问题所在和解决方法(此时内心一叹,果然还是百度大法好)
根本原因和解决方法:
原因是比如js的uft8编码和php输出的编码以及页面声明的编码不一致导致的,正常来讲是uft8,而js运行的是uft16(想不到吧.jpg)
找到问题就很好办了,我们把uft8编码转换成uft16即可解决,百度已经有现成的转换代码,这里放出来一下!
function utf8to16(str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; while (i < len) { c = str.charCodeAt(i++); switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: out += str.charAt(i - 1); break; case 12: case 13: char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break } } return out };
-- 展开阅读全文 --