JS實(shí)現(xiàn)漢字與Unicode碼相互轉(zhuǎn)換的方法詳解
本文實(shí)例講述了JS實(shí)現(xiàn)漢字與Unicode碼相互轉(zhuǎn)換的方法。分享給大家供大家參考,具體如下:
js文件中,有些變量的值可能會(huì)含有漢字,畫面引入js以后,有可能會(huì)因?yàn)樽址脑?,把里面的漢字都變成亂碼。后來發(fā)現(xiàn)網(wǎng)上的一些js里會(huì)把變量中的漢字都表示成”\u“開頭的16進(jìn)制編碼,這樣應(yīng)該可以解決上面的問題。
最近有時(shí)間在網(wǎng)上查找了一下實(shí)現(xiàn)方式,一種比較大眾化的:
function tounicode(data)
{
if(data == '') return '請(qǐng)輸入漢字';
var str ='';
for(var i=0;i<data.length;i++)
{
str+="\\u"+parseInt(data[i].charCodeAt(0),10).toString(16);
}
return str;
}
function tohanzi(data)
{
if(data == '') return '請(qǐng)輸入十六進(jìn)制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;
}
還找到一個(gè)相對(duì)簡單一些,但比較另類的:
var GB2312UnicodeConverter={
ToUnicode:function(str){
return escape(str).toLocaleLowerCase().replace(/%u/gi,'\\u');
}
,ToGB2312:function(str){
return unescape(str.replace(/\\u/gi,'%u'));
}
};
不過都有些問題,這兩種方式,都會(huì)把出漢字以外的其他字符都給轉(zhuǎn)換掉,做個(gè)簡單的加密解密算法還是可以的,但要是用來處理js文件,把回車、換行、空格、tab字符全換了,轉(zhuǎn)完以后,js文件也沒法運(yùn)行了。
偷懶不成,只能自己按照上面代碼處理邏輯寫一個(gè)了,只要保證只轉(zhuǎn)換漢字字符就可以了:
// 漢字轉(zhuǎn)為Unicode字符碼表示
function toUnicode(s){
return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(){
return "\\u" + RegExp["$1"].charCodeAt(0).toString(16);
});
}
方法寫完了,為了方便轉(zhuǎn)換js文件的內(nèi)容,再做個(gè)簡單的頁面,加一個(gè)button在畫面上。先要做的是在js文件Ctr+A,Ctr+C,把內(nèi)容拷貝 到剪貼板里,然后再新建的這個(gè)畫面上,點(diǎn)button的時(shí)候,從剪貼板里把內(nèi)容讀出來,調(diào)用方法轉(zhuǎn)一下,在把內(nèi)容放回剪貼板。然后再到 js文件里Ctr+A,Ctr+V一下就可以了。代碼如下:
<html>
<head>
<script language="javascript">
function Window_Load(){
var G = document.getElementById;
G("cmdToU").onclick = function(){
clipboardData.setData("text",toUnicode(clipboardData.getData("text")));
}
}
// 漢字轉(zhuǎn)為Unicode字符碼表示
// 原函數(shù)是,紅色是是錯(cuò)誤的,導(dǎo)致多個(gè)中文時(shí),結(jié)果都是最后一個(gè)漢字的unicode碼;
function toUnicode(s){
return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(){
return "\\u" + RegExp["$1"].charCodeAt(0).toString(16);
});
}
// 經(jīng)@b4b4指正,現(xiàn)更改
function toUnicode(s){
return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(newStr){
return "\\u" + newStr.charCodeAt(0).toString(16);
});
}
</script>
</head>
<body onload="Window_Load();">
<button id="cmdToU">漢字轉(zhuǎn)為Unicode</button>
</body>
</html>
這個(gè)頁面只能在IE內(nèi)核的瀏覽器下才能正常運(yùn)行,因?yàn)閏lipboardData對(duì)象好像只在IE下面有。
PS:這里再為大家提供幾款Unicode編碼轉(zhuǎn)換操作相關(guān)工具供大家參考使用:
在線Unicode/中文轉(zhuǎn)換工具:
http://tools.jb51.net/transcoding/unicode_chinese
Native/Unicode在線編碼轉(zhuǎn)換工具:
http://tools.jb51.net/transcoding/native2unicode
在線中文漢字/ASCII碼/Unicode編碼互相轉(zhuǎn)換工具:
http://tools.jb51.net/transcoding/chinese2unicode
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript編碼操作技巧總結(jié)》、《JavaScript加密解密技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解
- js實(shí)現(xiàn)unicode碼字符串與utf8字節(jié)數(shù)據(jù)互轉(zhuǎn)詳解
- 解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問題
- 詳解json string轉(zhuǎn)換為java bean及實(shí)例代碼
- javascript使用btoa和atob來進(jìn)行Base64轉(zhuǎn)碼和解碼
- js 轉(zhuǎn)義字符及URI編碼詳解
- js中unicode轉(zhuǎn)碼方法詳解
- js unicode 編碼解析關(guān)于數(shù)據(jù)轉(zhuǎn)換為中文的兩種方法
- 如何通過JS實(shí)現(xiàn)轉(zhuǎn)碼與解碼
相關(guān)文章
JavaScript使用DeviceOne開發(fā)實(shí)戰(zhàn)(四)仿優(yōu)酷視頻應(yīng)用
這篇文章主要介紹了JavaScript使用DeviceOne開發(fā)實(shí)戰(zhàn)(四)仿優(yōu)酷視頻應(yīng)用的相關(guān)資料,需要的朋友可以參考下2015-12-12
Javascript 獲取鼠標(biāo)當(dāng)前的位置實(shí)現(xiàn)方法
這篇文章主要介紹了Javascript 獲取鼠標(biāo)當(dāng)前的位置實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10
javascript中this做事件參數(shù)相關(guān)問題解答
有關(guān)this想必大家早有所耳聞,只不過在使用中不是那么在意而已,接下來為大家介紹下this做事件參數(shù)問題,感興趣的你可不要錯(cuò)過了哈2013-03-03
JS promise 的回調(diào)和 setTimeout 的回調(diào)到底誰先執(zhí)行
本文主要介紹了JS promise 的回調(diào)和 setTimeout 的回調(diào)到底誰先執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

