您的位置:首页 > Web前端 > JavaScript

JS之汉字与Unicode码的相互转化

2017-11-16 11:11 447 查看
有时候,我们在给后端传递变量的的值中有汉字,可能由于编码的原因,传递到后端后变为乱码了。所以有时候为了省事或者其它特殊要求的时候,会把传递的汉字转换成Unicode编码后再进行传递。

当然汉字转换成unicode编码,使用JS的charCodeAt()方法就可以。

'好'.charCodeAt(0).toString(16)
"597d"


这段代码的意思是,把字符'好'转化成Unicode编码,toString()就是把字符转化成16进制了

用法:
charCodeAt()
方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数
语法:
stringObject.charCodeAt(index)

index
参数必填,表示字符串中某个位置的数字,即字符在字符串中的下标。
注:字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回
NaN

例如:

var str="Hello world!"
document.write(str.charCodeAt(1))
//结果:101


'好哦'.charCodeAt(0).toString(16)
"597d"
'好哦'.charCodeAt(1).toString(16)
"54e6"


要是想把unicode解码成字符呢?

要想对Unicode解码的话,必须要用转义字符'\u'

'\u54e6'
"哦"


总结下:


js unicode是以十六进制代码外加开头\u表示的字符串。即\unnnn

Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。


下面先看一个简单的例子,汉字转化为unicode方法:

function toUnicodeFun(data){
if(data == '' || typeof data == 'undefined') return '请输入汉字';
var str ='';
for(var i=0;i<data.length;i++){
str+="\\u"+data.charCodeAt(i).toString(16);
}
return str;
}

var resultUnicode = toUnicodeFun('中国'); // \u4e2d\u56fd
console.log(resultUnicode);


unicode转化为汉字的方法:

function toChineseWords(data){
if(data == '' || typeof data == 'undefined') return '请输入十六进制unicode';
data = data.split("\\u");
var str ='';
for(var i=0;i<data.length;i++){
str+=String.fromCharCode(parseInt(data[i],16).toString(10));
}
return str;
}

var resultChineseWords = toChineseWords("\u4e2d\u56fd");
console.log(resultChineseWords);//中国


在网上找到另外一个实现方式:

var GB2312UnicodeConverter={
ToUnicode:function(str){
return escape(str).toLocaleLowerCase().replace(/%u/gi,'\\u');
},
ToGB2312:function(str){
return unescape(str.replace(/\\u/gi,'%u'));
}
};
var result = GB2312UnicodeConverter.ToUnicode('中国'); //\u4e2d\u56fd
var result2 = GB2312UnicodeConverter.ToUnicode(result); //%5cu4e2d%5cu56fd


下面实现汉字转Unicode码:

function toUnicode(s){
return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(newStr){
return "\\u" + newStr.charCodeAt(0).toString(16);
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: