js 編碼轉換 gb2312 和 utf8 互轉的2種方法
更新時間:2013年08月07日 11:17:03 作者:
這篇文章介紹了gb2312 和 utf8 互轉的JS方法,有需要的朋友可以參考一下
方法一:
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k])
{
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
使用時:xxx.innerHTML=gb2utf8(req.responseBody);
方法二:
<script language="JavaScript">
<!--
function utf8(wide) {
var c, s;
var enc = "";
var i = 0;
while(i<wide.length) {
c= wide.charCodeAt(i++);
// handle UTF-16 surrogates
if (c>=0xDC00 && c<0xE000) continue;
if (c>=0xD800 && c<0xDC00) {
if (i>=wide.length) continue;
s= wide.charCodeAt(i++);
if (s<0xDC00 || c>=0xDE00) continue;
c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
}
// output value
if (c<0x80) enc += String.fromCharCode(c);
else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
}
return enc;
}
var hexchars = "0123456789ABCDEF";
function toHex(n) {
return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}
var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function encodeURIComponentNew(s) {
var s = utf8(s);
var c;
var enc = "";
for (var i= 0; i<s.length; i++) {
if (okURIchars.indexOf(s.charAt(i))==-1)
enc += "%"+toHex(s.charCodeAt(i));
else
enc += s.charAt(i);
}
return enc;
}
alert(encodeURIComponentNew("中文"))
alert(decodeURIComponent(encodeURIComponentNew("中文")))
// -->
</script>
在java類中配合使用: (適用于ajax)
String dwp = new String(request.getParameter("dwp").getBytes("ISO-8859-1"),"gbk") ;
String dwc = new String(request.getParameter("dwc").getBytes("ISO-8859-1"),"gbk") ;
復制代碼 代碼如下:
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k])
{
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
使用時:xxx.innerHTML=gb2utf8(req.responseBody);
方法二:
復制代碼 代碼如下:
<script language="JavaScript">
<!--
function utf8(wide) {
var c, s;
var enc = "";
var i = 0;
while(i<wide.length) {
c= wide.charCodeAt(i++);
// handle UTF-16 surrogates
if (c>=0xDC00 && c<0xE000) continue;
if (c>=0xD800 && c<0xDC00) {
if (i>=wide.length) continue;
s= wide.charCodeAt(i++);
if (s<0xDC00 || c>=0xDE00) continue;
c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
}
// output value
if (c<0x80) enc += String.fromCharCode(c);
else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
}
return enc;
}
var hexchars = "0123456789ABCDEF";
function toHex(n) {
return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}
var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function encodeURIComponentNew(s) {
var s = utf8(s);
var c;
var enc = "";
for (var i= 0; i<s.length; i++) {
if (okURIchars.indexOf(s.charAt(i))==-1)
enc += "%"+toHex(s.charCodeAt(i));
else
enc += s.charAt(i);
}
return enc;
}
alert(encodeURIComponentNew("中文"))
alert(decodeURIComponent(encodeURIComponentNew("中文")))
// -->
</script>
在java類中配合使用: (適用于ajax)
復制代碼 代碼如下:
String dwp = new String(request.getParameter("dwp").getBytes("ISO-8859-1"),"gbk") ;
String dwc = new String(request.getParameter("dwc").getBytes("ISO-8859-1"),"gbk") ;
您可能感興趣的文章:
- Javascript下的urlencode編碼解碼方法附decodeURIComponent
- js對圖片base64編碼字符串進行解碼并輸出圖像示例
- js 顯示base64編碼的二進制流網頁圖片
- utf-8編碼引起js輸出中文亂碼的解決辦法
- 通過javascript進行UTF-8編碼的實現(xiàn)方法
- 將字符串轉換成gb2312或者utf-8編碼的參數(shù)(js版)
- JS 文字符串轉換unicode編碼函數(shù)
- JavaScript Base64編碼和解碼,實現(xiàn)URL參數(shù)傳遞。
- JavaScript實現(xiàn)Base64編碼轉換
- js下用gb2312編碼解碼實現(xiàn)方法
- JS實現(xiàn)的哈夫曼編碼示例【原始版與修改版】
相關文章
javascript游戲開發(fā)之《三國志曹操傳》零部件開發(fā)(一)讓靜態(tài)人物動起來
首先來說,讓一個游戲賦有可玩性必須要動靜結合,我將要在下面告訴大家如何運用Javascript將靜態(tài)圖片變?yōu)閯討B(tài)圖片,感興趣的朋友可以了解下,便當鞏固js知識了2013-01-01JavaScript計時器用法分析【setTimeout和clearTimeout】
這篇文章主要介紹了JavaScript計時器用法,結合實例形式分析了setTimeout和clearTimeout函數(shù)的具體使用技巧,需要的朋友可以參考下2017-01-01javascript改變position值實現(xiàn)菜單滾動至頂部后固定
現(xiàn)在很多網站都有這樣的一個效果,當頁面滾動到一定高度時,菜單欄會固定在頁面頂部;該效果在 ie6 下不支持,因為ie6不支持 position:fixed,效果很不錯,感興趣的朋友可以了解下啊2013-01-01解析dom中的children對象數(shù)組元素firstChild,lastChild的使用
以下是對dom中的children對象數(shù)組元素firstChild,lastChild的使用進行了詳細的分析介紹,需要的朋友可以參考下2013-07-07