zoukankan      html  css  js  c++  java
  • Jquery 前端解码base64出现中文乱码的问题解决方案

    <script src="../static/js/jquery.base64.js"></script>
    <script src="../webstatic/js/jquery.min.js"></script>
    首先需要明白一点的是:
    js前端默认采用utf-16方式编码;
    后台数据加密前将数据转成了utf-8格式;
    因此解密后需要进行格式转换,从utf-8转为utf-16。

    utf8转为utf16:
    var utf8to16 = function(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:case7:
                            // 0xxxxxxx
                            out += str.charAt(i-1);
                            break;
                            case 12: case 13:
                            // 110x xxxx 10xx xxxx
                            char2 = str.charCodeAt(i++);
                            out += String.fromCharCode(((c & 0x1F) << 6) | (char2&0x3F));
                            break;
                            case 14:
                            // 1110 xxxx 10xx xxxx 10xx xxxx
                                char2 = str.charCodeAt(i++);
                                char3 = str.charCodeAt(i++);
                                out += String.fromCharCode(((c & 0x0F) << 12) |
                                    ((char2 & 0x3F) << 6) |
                                    ((char3 & 0x3F) << 0));
                                break;
                        }
                    }
                    return out;
                }

    utf16转为utf8:
    var utf16to8 = function(str) {
                    var out, i, len, c;
                    out = "";
                    len = str.length;
                    for(i = 0; i < len; i++) {
                        c = str.charCodeAt(i);
                        if ((c >= 0x0001) && (c <= 0x007F)) {
                            out += str.charAt(i);
                        } else if (c > 0x07FF) {
                            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
                            out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
                            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
                        } else {
                            out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
                            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
                        }
                    }
                    return out;
                }



    内容也是摘自博友,仅供学习参考。
     
  • 相关阅读:
    72.2801 LOL-盖伦的蹲草计划(广搜)
    71.双向最短路径:聚会
    POJ 2531 Network Saboteur
    POJ 3274 Gold Balanced Lineup(哈希)
    POJ 3349 Snowflake Snow Snowflakes(哈希)
    (重)POJ 3020Antenna Placement
    HDU 1098 Ignatius's puzzle
    中国海洋大学第四届朗讯杯高级组 I Cuckoo for Hashing
    中国海洋大学第四届朗讯杯高级组 A Rocky
    CF 217 B. Berland Bingo
  • 原文地址:https://www.cnblogs.com/qxh-beijing2016/p/11570480.html
Copyright © 2011-2022 走看看