JS基礎篇--JS之漢字與Unicode碼的相互轉化

有時候,咱們在給後端傳遞變量的的值中有漢字,可能因爲編碼的緣由,傳遞到後端後變爲亂碼了。因此有時候爲了省事或者其它特殊要求的時候,會把傳遞的漢字轉換成Unicode編碼後再進行傳遞。後端

固然漢字轉換成unicode編碼,使用JS的charCodeAt()方法就能夠。編碼

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

這段代碼的意思是,把字符''轉化成Unicode編碼toString()就是把字符轉化成16進制code

用法:charCodeAt() 方法可返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數
語法:stringObject.charCodeAt(index)
index參數必填,表示字符串中某個位置的數字,即字符在字符串中的下標。
注:字符串中第一個字符的下標是 0。若是 index 是負數,或大於等於字符串的長度,則 charCodeAt() 返回 NaN。
例如:unicode

var str="Hello world!"
document.write(str.charCodeAt(1))
//結果:101
'好哦'.charCodeAt(0).toString(16)
"597d"
'好哦'.charCodeAt(1).toString(16)
"54e6"

要是想把unicode解碼成字符呢?
要想對Unicode解碼的話,必需要用轉義字符'\u'字符串

'\u54e6'
"哦"

總結下:string

js unicode是以十六進制代碼外加開頭\u表示的字符串。即\unnnnit

Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,以知足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式公佈。io

下面先看一個簡單的例子,漢字轉化爲unicode方法:console

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); 
    }); 
}
相關文章
相關標籤/搜索