/*
* GB2312转UTF8
* 例:
* var xx=new GB2312UTF8();
*
var Utf8=xx.Gb2312ToUtf8("你aaa好aaaaa");
* var
Gb2312=xx.Utf8ToGb2312(Utf8);
* alert(Gb2312);
*/
function GB2312UTF8(){
this.Dig2Dec=function(s){
var retV = 0;
if(s.length == 4){
for(var i =
0; i < 4; i ++){
retV += eval(s.charAt(i)) *
Math.pow(2, 3 - i);
}
return retV;
}
return -1;
}
this.Hex2Utf8=function(s){
var retS = "";
var tempS = "";
var ss = "";
if(s.length == 16){
tempS = "1110" + s.substring(0,
4);
tempS += "10" + s.substring(4, 10);
tempS += "10" + s.substring(10,16);
var sss =
"0123456789ABCDEF";
for(var i = 0; i < 3; i ++){
retS += "%";
ss = tempS.substring(i * 8,
(eval(i)+1)*8);
retS +=
sss.charAt(this.Dig2Dec(ss.substring(0,4)));
retS +=
sss.charAt(this.Dig2Dec(ss.substring(4,8)));
}
return retS;
}
return "";
}
this.Dec2Dig=function(n1){
var s = "";
var n2 =
0;
for(var i = 0; i < 4; i++){
n2 =
Math.pow(2,3 - i);
if(n1 >= n2){
s +=
‘1‘;
n1 = n1 - n2;
}
else
s += ‘0‘;
}
return s;
}
this.Str2Hex=function(s){
var c = "";
var
n;
var ss = "0123456789ABCDEF";
var digS = "";
for(var i = 0; i < s.length; i ++){
c =
s.charAt(i);
n = ss.indexOf(c);
digS +=
this.Dec2Dig(eval(n));
}
return digS;
}
this.Gb2312ToUtf8=function(s1){
var s = escape(s1);
var sa = s.split("%");
var retV ="";
if(sa[0] !=
""){
retV = sa[0];
}
for(var i = 1; i <
sa.length; i ++){
if(sa[i].substring(0,1) == "u"){
retV +=
this.Hex2Utf8(this.Str2Hex(sa[i].substring(1,5)));
if(sa[i].length){
retV += sa[i].substring(5);
}
}
else{
retV += unescape("%" + sa[i]);
if(sa[i].length){
retV
+= sa[i].substring(5);
}
}
}
return
retV;
}
this.Utf8ToGb2312=function(str1){
var
substr = "";
var a = "";
var b = "";
var c = "";
var i = -1;
i =
str1.indexOf("%");
if(i==-1){
return
str1;
}
while(i!= -1){
if(i<3){
substr = substr + str1.substr(0,i-1);
str1 = str1.substr(i+1,str1.length-i);
a =
str1.substr(0,2);
str1 =
str1.substr(2,str1.length - 2);
if(parseInt("0x"
+ a) & 0x80 == 0){
substr = substr +
String.fromCharCode(parseInt("0x" + a));
}
else if(parseInt("0x" + a) & 0xE0 == 0xC0){ //two
byte
b = str1.substr(1,2);
str1 = str1.substr(3,str1.length - 3);
var widechar = (parseInt("0x" + a) & 0x1F) <<
6;
widechar = widechar | (parseInt("0x" +
b) & 0x3F);
substr = substr +
String.fromCharCode(widechar);
}
else{
b = str1.substr(1,2);
str1 = str1.substr(3,str1.length - 3);
c = str1.substr(1,2);
str1 =
str1.substr(3,str1.length - 3);
var
widechar = (parseInt("0x" + a) & 0x0F) << 12;
widechar = widechar | ((parseInt("0x" + b) & 0x3F)
<< 6);
widechar = widechar |
(parseInt("0x" + c) & 0x3F);
substr =
substr + String.fromCharCode(widechar);
}
}
else {
substr = substr +
str1.substring(0,i);
str1= str1.substring(i);
}
i = str1.indexOf("%");
}
return substr+str1;
}
}