转换javascript vbscript编码的方法
方法一: functiongb2utf8(data){ varglbEncode=[]; gb2utf8_data=data; execScript("gb2utf8_data=MidB(gb2utf8_data,1)","VBScript"); vart=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2"); t=t.split("@"); vari=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; returnunescape(t.join("%")); } 使用时:xxx.innerHTML=gb2utf8(req.responseBody); 方法二. Functionbytes2BSTR_GB2312(vIn) strReturn="" Fori=1ToLenB(vIn) ThisCharCode=AscB(MidB(vIn,i,1)) IfThisCharCode<&H80Then strReturn=strReturn&Chr(ThisCharCode) Else NextCharCode=AscB(MidB(vIn,i+1,1)) strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode)) i=i+1 EndIf Next bytes2BSTR_GB2312=strReturn EndFunction 方法三: <scriptlanguage="JavaScript"> <!-- functionutf8(wide){ varc,s; varenc=""; vari=0; while(i<wide.length){ c=wide.charCodeAt(i++); //handleUTF-16surrogates 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; } //outputvalue if(c<0x80)enc+=String.fromCharCode(c); elseif(c<0x800)enc+=String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F)); elseif(c<0x10000)enc+=String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F)); elseenc+=String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F)); } returnenc; } varhexchars="0123456789ABCDEF"; functiontoHex(n){ returnhexchars.charAt(n>>4)+hexchars.charAt(n&0xF); } varokURIchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"; functionencodeURIComponentNew(s){ vars=utf8(s); varc; varenc=""; for(vari=0;i<s.length;i++){ if(okURIchars.indexOf(s.charAt(i))==-1) enc+="%"+toHex(s.charCodeAt(i)); else enc+=s.charAt(i); } returnenc; } alert(encodeURIComponentNew("中文")) alert(decodeURIComponent(encodeURIComponentNew("中文"))) //--> </script> 方法一: functiongb2utf8(data){ varglbEncode=[]; gb2utf8_data=data; execScript("gb2utf8_data=MidB(gb2utf8_data,1)","VBScript"); vart=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2"); t=t.split("@"); vari=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; returnunescape(t.join("%")); } 使用时:xxx.innerHTML=gb2utf8(req.responseBody); 方法二. Functionbytes2BSTR_GB2312(vIn) strReturn="" Fori=1ToLenB(vIn) ThisCharCode=AscB(MidB(vIn,i,1)) IfThisCharCode<&H80Then strReturn=strReturn&Chr(ThisCharCode) Else NextCharCode=AscB(MidB(vIn,i+1,1)) strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode)) i=i+1 EndIf Next bytes2BSTR_GB2312=strReturn EndFunction 方法三: <scriptlanguage="JavaScript"> <!-- functionutf8(wide){ varc,s; varenc=""; vari=0; while(i<wide.length){ c=wide.charCodeAt(i++); //handleUTF-16surrogates 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; } //outputvalue if(c<0x80)enc+=String.fromCharCode(c); elseif(c<0x800)enc+=String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F)); elseif(c<0x10000)enc+=String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F)); elseenc+=String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F)); } returnenc; } varhexchars="0123456789ABCDEF"; functiontoHex(n){ returnhexchars.charAt(n>>4)+hexchars.charAt(n&0xF); } varokURIchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"; functionencodeURIComponentNew(s){ vars=utf8(s); varc; varenc=""; for(vari=0;i<s.length;i++){ if(okURIchars.indexOf(s.charAt(i))==-1) enc+="%"+toHex(s.charCodeAt(i)); else enc+=s.charAt(i); } returnenc; } alert(encodeURIComponentNew("中文")) alert(decodeURIComponent(encodeURIComponentNew("中文"))) //--> </script> 方法一: functiongb2utf8(data){ varglbEncode=[]; gb2utf8_data=data; execScript("gb2utf8_data=MidB(gb2utf8_data,1)","VBScript"); vart=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2"); t=t.split("@"); vari=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; returnunescape(t.join("%")); } 使用时:xxx.innerHTML=gb2utf8(req.responseBody); 方法二. Functionbytes2BSTR_GB2312(vIn) strReturn="" Fori=1ToLenB(vIn) ThisCharCode=AscB(MidB(vIn,i,1)) IfThisCharCode<&H80Then strReturn=strReturn&Chr(ThisCharCode) Else NextCharCode=AscB(MidB(vIn,i+1,1)) strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode)) i=i+1 EndIf Next bytes2BSTR_GB2312=strReturn EndFunction 方法三: <scriptlanguage="JavaScript"> <!-- functionutf8(wide){ varc,s; varenc=""; vari=0; while(i<wide.length){ c=wide.charCodeAt(i++); //handleUTF-16surrogates 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; } //outputvalue if(c<0x80)enc+=String.fromCharCode(c); elseif(c<0x800)enc+=String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F)); elseif(c<0x10000)enc+=String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F)); elseenc+=String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F)); } returnenc; } varhexchars="0123456789ABCDEF"; functiontoHex(n){ returnhexchars.charAt(n>>4)+hexchars.charAt(n&0xF); } varokURIchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"; functionencodeURIComponentNew(s){ vars=utf8(s); varc; varenc=""; for(vari=0;i<s.length;i++){ if(okURIchars.indexOf(s.charAt(i))==-1) enc+="%"+toHex(s.charCodeAt(i)); else enc+=s.charAt(i); } returnenc; } alert(encodeURIComponentNew("中文")) alert(decodeURIComponent(encodeURIComponentNew("中文"))) //--> </script>