zoukankan      html  css  js  c++  java
  • 在js里UTF-8与GB2312的互转

    js的函数如下:

    function GB2312UTF8() {
        this.Dig2Dec = function(s) {
            var retV = 0;
            if (s.length == 4) {
                for (var i = 0; i < 4; i++) {
                    retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
                }
                return retV;
            }
            return - 1;
        }
        this.Hex2Utf8 = function(s) {
            var retS = "";
            var tempS = "";
            var ss = "";
            if (s.length == 16) {
                tempS = "1110" + s.substring(0, 4);
                tempS += "10" + s.substring(4, 10);
                tempS += "10" + s.substring(10, 16);
                var sss = "0123456789ABCDEF";
                for (var i = 0; i < 3; i++) {
                    retS += "%";
                    ss = tempS.substring(i * 8, (eval(i) + 1) * 8);
                    retS += sss.charAt(this.Dig2Dec(ss.substring(0, 4)));
                    retS += sss.charAt(this.Dig2Dec(ss.substring(4, 8)));
                }
                return retS;
            }
            return "";
        }
        this.Dec2Dig = function(n1) {
            var s = "";
            var n2 = 0;
            for (var i = 0; i < 4; i++) {
                n2 = Math.pow(2, 3 - i);
                if (n1 >= n2) {
                    s += '1';
                    n1 = n1 - n2;
                } else s += '0';
            }
            return s;
        }
    
        this.Str2Hex = function(s) {
            var c = "";
            var n;
            var ss = "0123456789ABCDEF";
            var digS = "";
            for (var i = 0; i < s.length; i++) {
                c = s.charAt(i);
                n = ss.indexOf(c);
                digS += this.Dec2Dig(eval(n));
            }
            return digS;
        }
        this.Gb2312ToUtf8 = function(s1) {
            var s = escape(s1);
            var sa = s.split("%");
            var retV = "";
            if (sa[0] != "") {
                retV = sa[0];
            }
            for (var i = 1; i < sa.length; i++) {
                if (sa[i].substring(0, 1) == "u") {
                    retV += this.Hex2Utf8(this.Str2Hex(sa[i].substring(1, 5)));
                    if (sa[i].length) {
                        retV += sa[i].substring(5);
                    }
                } else {
                    retV += unescape("%" + sa[i]);
                    if (sa[i].length) {
                        retV += sa[i].substring(5);
                    }
                }
            }
            return retV;
        }
        this.Utf8ToGb2312 = function(str1) {
            var substr = "";
            var a = "";
            var b = "";
            var c = "";
            var i = -1;
            i = str1.indexOf("%");
            if (i == -1) {
                return str1;
            }
            while (i != -1) {
                if (i < 3) {
                    substr = substr + str1.substr(0, i - 1);
                    str1 = str1.substr(i + 1, str1.length - i);
                    a = str1.substr(0, 2);
                    str1 = str1.substr(2, str1.length - 2);
                    if (parseInt("0x" + a) & 0x80 == 0) {
                        substr = substr + String.fromCharCode(parseInt("0x" + a));
                    } else if (parseInt("0x" + a) & 0xE0 == 0xC0) { //two byte
                        b = str1.substr(1, 2);
                        str1 = str1.substr(3, str1.length - 3);
                        var widechar = (parseInt("0x" + a) & 0x1F) << 6;
                        widechar = widechar | (parseInt("0x" + b) & 0x3F);
                        substr = substr + String.fromCharCode(widechar);
                    } else {
                        b = str1.substr(1, 2);
                        str1 = str1.substr(3, str1.length - 3);
                        c = str1.substr(1, 2);
                        str1 = str1.substr(3, str1.length - 3);
                        var widechar = (parseInt("0x" + a) & 0x0F) << 12;
                        widechar = widechar | ((parseInt("0x" + b) & 0x3F) << 6);
                        widechar = widechar | (parseInt("0x" + c) & 0x3F);
                        substr = substr + String.fromCharCode(widechar);
                    }
                } else {
                    substr = substr + str1.substring(0, i);
                    str1 = str1.substring(i);
                }
                i = str1.indexOf("%");
            }
    
            return substr + str1;
        }
    }

    2、应用案例如下

    //GB2312转UTF8
    var xx = new GB2312UTF8();
    var Utf8 = xx.Gb2312ToUtf8("你aaa好aaaaa");
    alert(Utf8);
    //UTF8转GB2312
    var Gb2312 = xx.Utf8ToGb2312(Utf8);
    alert(Gb2312);

    文章来源:http://blog.csdn.net/tengyang11/article/details/6188392

  • 相关阅读:
    源码学习-出差有感
    《java数据结构与算法》系列之“快速排序"
    新征途
    命运总是喜欢开玩笑
    《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
    秒杀9种排序算法(JavaScript版)
    《进击的巨人》
    Noip2001 提高组 T3
    Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
    Noip2012 提高组 Day1 T1 Vigenère 密码
  • 原文地址:https://www.cnblogs.com/scrit/p/3694600.html
Copyright © 2011-2022 走看看