js文件中,有些變量的值可能會含有漢字,畫面引入js以后,有可能會因為字符集的原因,把里面的漢字都變成亂碼。后來發現網上的一些js里會把變量中的漢字都表示成”\u“開頭的16進制編碼,這樣應該可以解決上面的問題。
最近有時間在網上查找了一下實現方式,一種比較大眾化的:
function tounicode(data) { if(data == '') return '請輸入漢字'; 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 '請輸入十六進制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 GB2312UnicodeConverter={ ToUnicode:function(str){ return escape(str).toLocaleLowerCase().replace(/%u/gi,'\\u'); } ,ToGB2312:function(str){ return unescape(str.replace(/\\u/gi,'%u')); } };
不過都有些問題,這兩種方式,都會把出漢字以外的其他字符都給轉換掉,做個簡單的加密解密算法還是可以的,但要是用來處理js文件,把回車、換行、空格、tab字符全換了,轉完以后,js文件也沒法運行了。
偷懶不成,只能自己按照上面代碼處理邏輯寫一個了,只要保證只轉換漢字字符就可以了:
// 漢字轉為Unicode字符碼表示 function toUnicode(s){ return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(){ return "\\u" + RegExp["$1"].charCodeAt(0).toString(16); }); }
方法寫完了,為了方便轉換js文件的內容,再做個簡單的頁面,加一個button在畫面上。先要做的是在js文件Ctr+A,Ctr+C,把內容拷貝 到剪貼板里,然后再新建的這個畫面上,點button的時候,從剪貼板里把內容讀出來,調用方法轉一下,在把內容放回剪貼板。然后再到 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"))); } } // 漢字轉為Unicode字符碼表示
// 原函數是,紅色是是錯誤的,導致多個中文時,結果都是最后一個漢字的unicode碼;
function toUnicode(s){ return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(){ return "\\u" + RegExp["$1"].charCodeAt(0).toString(16); }); }
// 經@b4b4指正,現更改
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">漢字轉為Unicode</button> </body> </html>
這個頁面只能在IE內核的瀏覽器下才能正常運行,因為clipboardData對象好像只在IE下面有。
感謝
@b4b4閱讀並指正;
