>  기사  >  웹 프론트엔드  >  XMLHTTP 왜곡 코드(UTF8, GB2312 인코딩 및 디코딩)에 대한 솔루션_javascript 기술

XMLHTTP 왜곡 코드(UTF8, GB2312 인코딩 및 디코딩)에 대한 솔루션_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:12:081260검색

데이터 전송측에서는 자바스크립트의 이스케이프 기능을 이용해 중국어를 모두 영어 인코딩으로 변환해 미리 저장해둔다. (ASP 등 다른 언어의 함수를 사용해 실시간으로 출력을 변환할 수도 있다.)
데이터 수신측에서는 자바스크립트의 unescape 기능을 사용하여 모든 영어 인코딩을 복원합니다.
Ajax는 인코딩에 관계없이 영어를 정상적으로 전송할 수 있으므로 이 방법은 쉽게 해결할 수 있습니다.

------------------------------- ------ -----------------------
두 가지 측면이 있습니다. XMLHTTP Post Form을 사용할 때 양식이 깨졌습니다. 이유는 Post 양식 데이터가 중국어로 깨졌기 때문입니다. 잘못된 XMLHTTP 인코딩으로 인해 서버 응답이 깨졌습니다. 즉, 이 기사에서는 주로 두 가지 문제, 즉 중국어 콘텐츠를 올바르게 게시하는 방법과 획득한 중국어 콘텐츠를 올바르게 표시하는 방법을 해결합니다.
1부 중국어 콘텐츠
전자 우편 양식이 어떻게 제출되는지 살펴보겠습니다.

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

🎜>strA = "submit1=Submit&text1=scsdfsd";를 다음으로 바꾸면
strA = "submit1=Submit&text1=English";
제출된 내용이 전혀 올바르지 않음을 알 수 있습니다. Request.Form(" ASP의 Text1")은 값을 전혀 가져올 수 없습니다. Request.BinaryRead를 사용하여 HTML 양식에 게시물 내용을 작성하고 살펴보았지만 문제를 발견했습니다. 제출 시 양식도 인코딩해야 하며 인코딩된 중국어 문자는 %??%?와 유사한 이스케이프 문자입니다. ?. 예를 들어 "중국어"는 ����로 인코딩됩니다. 하하, 내가 멍청하다고 비난하세요. CONTENT-TYPE에는 application/x-www-form-urlencoded라고 명확하게 명시되어 있습니다. 물론 urlencoded가 어떻게 생겼는지입니다. 이 경우 우리는 무엇을 해야할지 알고 있습니다. 직접 변환을 수행하면 코드는 다음과 같습니다.



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


(여기서 이전 JavaScript 코드를 VBScript로 변경했습니다. 꽉 차서 할 일이 없어서가 아닙니다. 이유는 나중에 설명하겠습니다.)
파트 II. 얻은 중국어 콘텐츠를 올바르게 표시합니다
OK, 서버 측에서 양식의 내용을 작성하는 경우 데이터베이스/파일로 이동하면 거기에 표시되는 중국어에는 문제가 없습니다. 그러나 서버의 응답을 보려면 문제는 다음과 같습니다. 응답의 내용은 XML이 아닙니다. 물론 XMLHTTP.responseXML에는 아무것도 없습니다. 그렇다면 responseText를 사용하세요.
alert(oReq.responseText)
결과를 살펴보세요. 의 노력:P
근데..어떻게 한자가 다 사각형으로 변했지? (타자할 수가 없어요. 관심이 있으시면 직접 해보셔도 됩니다. 필요는 없습니다. 게시하려면 한자가 포함된 웹페이지를 가져와서 찾으면 됩니다. )
이유는 매우 간단합니다. XMLHTTP가 응답을 받을 때 응답이 UTF8로 인코딩된 것으로 가정합니다. 응답이 XML인 경우 인코딩을 통해 인코딩을 지정할 수도 있지만 HTML은 그렇게 할 수 없습니다. (빌어먹을 GB2312, 또 무너뜨려!) 그래서 GB2312 인코딩이 포함된 HTML을 UTF8 형식으로 취급하고, 오류가 없을 때만 유령이 나올 것입니다!
다행히 해결책이 있습니다. XMLHTTP의 responseBody 속성에는 "서버에서 직접 수신된 디코딩되지 않은 원시 바이트"라는 디코딩되지 않은 응답이 포함되어 있습니다. 유일한 문제는 responseBody가 부호 없는 바이트 배열을 반환한다는 것입니다. 우리는 그것에 액세스하여 BSTR로 변환합니까?
이것이 위의 코드를 VBScript로 변경한 이유입니다. VBScript는 할 수 있지만 JavaScript는 할 수 없습니다.
코드는 다음과 같습니다.



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



-----------------------------------------以上为转载------------------
http://www.dhtmlx.com

시작 전문적인 Ajax
현재 웹 애플리케이션 구축
最近用了 DHTMLX的tree,中文적xml居然用不了,报错,整个系统是GB2312的,而DHTMLX只支持UTF8,英文是正常的,中文就了。

사용법也很简单,是DHTMLX 演示里用的代码。
复代码 代码如下:

var obj=document.getElementById(oid);
obj.style.display="블록";
obj.focus();
if(obj.innerHTML!="")return;
tree=new dhtmlXTreeObject(oid,"100%","100%",0);
tree.setImagePath("js/imgs/csh_vista/");
tree.setOnClickHandler(click1);
tree.setXMLAutoLoading("tree.asp");
//트리의 첫 번째 레벨 로드
tree.loadXML("tree.asp?id=0"); 查了些资料,最终解决了。


再深入一层发现是,Microsoft.XMLHTTP的原因,就查到了上面的文件。
如是就简单了,修改如下:
1. 增加一个VBScript的中文转换的函数




复aze代码
代码如下: <스크립트 언어 ="VB스크립트"> '处理中文
function bin2str(bin)
dim tmp,ustr,i
tmp=""
for i=1 to LenB(bin)-1
ustr=AscB (MidB(bin,i,1))
ustr>127인 경우
i=i 1
tmp=tmp&chr(ustr*256 AscB(MidB(bin,i,1)))
else
tmp=tmp&chr(ustr)
end if
next
bin2str=tmp
end function



2.dhtmlxcommon.js의 getXMLTopNode
var xmlString = this.xmlDoc.responseText;
当然文件也是保存为gb2312格式的.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.