【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
};-- 展开阅读全文 --
