js进行Unicode编码转换

作者:翅膀的初衷 来源:本站原创 发布时间:2014-05-29 查看数:64078

我们在查看一些JS文件的时候,经常会看到一些下面类似的代码:

\u4f60\u597d\uff0c\u6781\u5ff5\u7f51\uff01

于是有很多同学表示很疑惑,不知道这是什么?

其实只要去掉\u再把余下的数字转换成十进制后就会发现,这是中文"你好,极念网!"几个字的unicode码,换句话说,这些"代码"是unicode码的一种十六制表示形式,它能被各大浏览器直接识别,

同时常见的还有:

你好,极念网!

它是unicode码的十进制现示,在Web中也常常见到,可以直接在浏览器中显示!

那么为什么我们要在Js文件中,把汉字进行处理呢?因为如果单独的JS文件中存在汉字,而正好JS文件本身的编码格式和网页文件格式不一致,就很容易出现JS乱码现象。

把汉字转换成16进制的表现形式,就不会存在此问题。

而Unicode码的十进制表示一般用于HTML中,有时也会用于数据库保存时对关键字进行替换。

今天在写一个JS类库的时候,需要把一引起汉字转换成\u之类的格式,于是写了几个转换类,在此分享给大家。

首先,因为这几种格式,我也不太清楚标准的名字应该叫什么,因为看chinaz上面,把 汉字转换成 你(十进制)的格式叫做 "ASCII转unicode",把汉字转换成 \u4f60 (十六进制)的格式 叫做"中文转unicode",因此,我也沿用它的称呼,如果不当,欢迎大家给我指出。

ASCII转Unicode

function ascii2Unicode(str){
    if(!str){
        return str;
    }
    var r = '';
    for(var i=0;i<str.length;i++){
        r+='&#' + str.charCodeAt(i)+';';
    }
    return r;
}

Unicode转ASCII

function unicode2Ascii(str){
    var n = 0;
    var r = '';
    var m = 0;
    //65535
    for(var i=0;i<str.length;i++){
        if(str.charAt(i)==='&'&& i < str.length-1  &&str.charAt(i+1)==='#'){
            n=0;
            for(var j=0;j<6;j++) {
                m = i+2 + j;
                if(m >= str.length){
                    break;
                }
                if(str.charAt(m)===';'){
                    n = j;
                    break;
                }
            }
            if(n===0){
                r += str.charAt(i);
            }else{
                r += String.fromCharCode(parseInt(str.substr(i+2,n)));
                i+=n+2;
            }
        }else{
            r += str.charAt(i);
        }
    }
   
    return r;
}

中文转Unicode

function chinese2Unicode(str){
    if(!str){
        return str;
    }
    var r = '';
    for(var i=0;i<str.length;i++){
        r+='\\u' + str.charCodeAt(i).toString(16);
    }
    return r;
}

Unicode转中文

function unicode2Chinese(str){
    var n = 0;
    var r = '';
    for(var i=0;i<str.length;i++){
        if(str.charAt(i)==='\\'&& i+5 < str.length  &&str.charAt(i+1)==='u'){
            n =  parseInt(str.substr(i+2,4),16);
            if(!isNaN(n)){
                r += String.fromCharCode(n);
                i+=5;
            }else{
                r += str.charAt(i);
            }
        }else{
            r += str.charAt(i);
        }
    }
    return r;
}

演示地址:http://www.jiniannet.com/Page/unicode 大家以后也可以直接用本地址进行编码转换,喜欢的话,记得收藏一下。

另外,以上代码都是原创,大家要是转载的话请保留作者与本文链接!