>  기사  >  백엔드 개발  >  JS에서 utf8과 GBK 간의 문자 인코딩 변환

JS에서 utf8과 GBK 간의 문자 인코딩 변환

WBOY
WBOY원래의
2016-08-08 09:30:544964검색

정보 링크: http://igogogo9.iteye.com/blog/105669

1. PHP의 json_encode 함수는 GBK 또는 GB2312로 인코딩된 데이터를 변환하는 경우에만 제한됩니다. , 한자는 NULL로 변환됩니다.

2. JavaScript에서 json 사용:

① 객체를 json 문자열로 변환:

JSON.stringify(obj)

② json을 객체로 변환:

dataObj = eval('{"name":"Jack"}');

PHP에서 생성된 json을 객체로 변환합니다.

dataObj = eval('(< ? =json_encode(array('name'=>'Jack'))?>)');

3. JavaScript에서 GBK와 UTF-8 간 변환:

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


위 내용은 관련 측면을 포함하여 JS에서 utf8과 GBK 간의 문자 인코딩 변환을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.