您的位置:首页 > Web前端 > JavaScript

js 编码转换 gb2312 & utf8

2012-03-14 15:43 246 查看
方法一:

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);

方法二.

Function bytes2BSTR_GB2312(vIn)

strReturn = ""

For i = 1 To LenB(vIn)

ThisCharCode = AscB(MidB(vIn,i,1))

If ThisCharCode < &H80 Then

strReturn = strReturn & Chr(ThisCharCode)

Else

NextCharCode = AscB(MidB(vIn,i+1,1))

strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

i = i + 1

End If

Next

bytes2BSTR_GB2312 = strReturn

End Function

方法三:

<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") ;

经证实,方法一可行,其余未试。

来源:http://blog.163.com/shn_000/blog/static/17131391200762542857353/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: