JS中utf8和GBK的字符编码转换

时间:2022-03-26 03:58:58

1、PHP中的 json_encode 函数只限编码UTF-8的数据,当转换GBK或者GB2312等编码的数据时,会将汉字转为NULL。


2、JavaScript 中json 的使用:

① 将对象转为json字符串:
JSON.stringify(obj)
② 将json转为对象:
dataObj = eval('{"name":"Jack"}');
③ 将 PHP生成的 json转为对象:
dataObj = eval('(<?=json_encode(array('name'=>'Jack'))?>)');

④ JQuery中Ajax请求返回JSON的方式:

$.getJSON(url, {param: data}, function (msg){ console.log(msg); });

$.post(url, {param: data}, function (msg){ console.log(msg); }, 'JSON');


3、JavaScript 中,GBK和UTF-8的转换:

资料链接:http://igogogo9.iteye.com/blog/105669

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