>  기사  >  웹 프론트엔드  >  js_javascript 기술 하에서 gb2312 인코딩 및 디코딩을 사용하는 구현 방법

js_javascript 기술 하에서 gb2312 인코딩 및 디코딩을 사용하는 구현 방법

WBOY
WBOY원래의
2016-05-16 18:37:271664검색
요구 사항
js에서 gb2312로 중국어를 인코딩합니다. 예를 들어 "I"는 "��"로 인코딩되어야 합니다.

분석
우리 모두 알고 있듯이 encodeURI 및 encodeURIComponent는 "I"가 "I"로 인코딩되는 것처럼 utf-8로 인코딩됩니다. 실험에 따르면 어딘가에 인코딩을 지정하는 매개 변수가 없는 것 같습니다. 그냥 다른 방법을 찾아보세요.
대략적인 분석에는 다음과 같은 해결 방법이 있습니다.
1. js를 사용하여 숨겨진 iframe을 생성하고 이를 gb2312 인코딩으로 지정하고 변환해야 하는 텍스트를 iframe의 양식에서 양식을 get 메소드로 지정하고 제출한 다음
해당 URL을 가져와 구문 분석하면 gb2312로 인코딩된 텍스트를 가져올 수 있습니다.
2. ajax를 사용하여 인코딩을 위해 서버로 보낸 후 다시 보냅니다.
3. js에서 gb2312 인코딩 테이블을 만듭니다.

구현
첫 번째 솔루션은 너무 까다로워서 여러 다른 브라우저에서 테스트해야 합니다.
두 번째 옵션은 서버 협력이 필요합니다.
다음은 세 번째 해결 방법의 구현입니다.
처음에는 배열을 사용하여 인코딩 테이블을 저장할 계획이었습니다. 나중에 js 파일의 크기를 줄이기 위해 문자열 저장소로 전환했습니다.
그래서 js 코드는 다음과 같습니다.

코드
코드 복사 코드는 다음과 같습니다. :

함수 encodeToGb2312(str){
var strOut=""
for(var i = 0; i < str.length; i ){
var c = str.charAt(i );
var code = str.charCodeAt(i)
if(c==" ") strOut =" "; else if(code >= 19968 && code <= 40869){
index = code - 19968;
strOut = "%" z.substr(index*4,2) "%" z.substr(index*4 2,2); >}
else {
strOut = "%" str.charCodeAt(i).toString(16)
}
}
return strOut; (str){
var strOut = '';
for (var i=0;ivar c = str.charAt(i)// 공백입니다
if (c == ' '){
strOut = '
}
// 시작하지 않는 경우 a, b, c, 1, 2 등 %를 사용하여 직접 반환
else if ( c != '%'){
strOut = c
}
// %는
else{
i로 시작; 🎜>var nextC = str.charAt(i);
// 한자가 아닌 숫자
if (!isNaN(parseInt(nextC))){
i
strOut = decodeURIComponent(c nextC str.charAt(i));
}
else{
var x = new String()
try
{
var code = str.substr(i,2 ) str.substr(i 3,2);
i = i 4;
var index = -1
while ((index = z.indexOf(code,index 1)) != -1 ){
if (index%4 == 0 ){
strOut = String.fromCharCode(index/4 19968)
break
}
}
}catch(e ){}
}
}
}
return strOut
}
var z='{0}'


(중국어 구두점은 여기서는 고려하지 않고, 주로 중국어 구두점과 유니코드의 일본어 및 한국어 구두점을 기반으로 합니다. 구두점은 뒤섞여 여러 곳에 분산되어 있어서 하기가 너무 게으릅니다. 그것을 가지고 있는 사람은 나에게 사본을 보낼 수 있습니다. 감사합니다. )
마지막으로 .NET을 사용하여 z에서 코드를 생성합니다.

Code



코드 복사

코드는 다음과 같습니다. StringBuilder sb = new StringBuilder(); string strFormat = @"...z = '" // 이전 js 코드const int MinHanzi = 19968; const int MaxHanzi = 40869;
for (int i = MinHanzi; i < MaxHanzi 1; i )
{
byte[] bytes = Encoding.GetEncoding("gb2312"). GetBytes((( char)i).ToString());
sb.AppendFormat("{0}{1}", Convert.ToString(bytes[0], 16).ToUpper(), Convert.ToString( bytes[1] , 16).ToUpper());
}
string str = strFormat sb.ToString(0, sb.Length - 1)
System.IO.File. WriteAllText(@" F:encodeGb2312.js", str, Encoding.ASCII)

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