js进行Unicode编码转换

翅膀的初衷

发表于2014-05-29 22:23:00

我们在查看一些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 大家以后也可以直接用本地址进行编码转换,喜欢的话,记得收藏一下。

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