【JS笔记】浏览器window.atob来进行Base64解码后英文正常,中文乱码如何解决?

沉梦小哥哥
预计阅读时长 13 分钟
位置: 首页 JavaScript 正文

先来一段废话:

由于现在高级编程语言底层都是英文写的,国内程序员都会遇到转码后中文乱码的问题

不管是项目文件编码不一致,或者是字符串加密转换都可能存在,这是因为英文和中文字节长度不一样需要转换,且中文编码有多个导致的,

中文常见的有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
};



-- 展开阅读全文 --
头像
【数组篇】数组排序冒泡排序从大到小从小到大
« 上一篇 2021-07-20
宝塔面板Nginx设置所有文件或某文件允许跨域请求
下一篇 » 2021-12-22
取消
微信二维码
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]