사람들은 종종 XMLHTTP를 사용할 때 한자가 깨져 나오는 문제로 인해 어려움을 겪는다고 말합니다. 몇 가지 정보를 확인했는데 결과가 실망스러웠습니다. 모두가 이 문제를 해결하기 위해 ASP 서버 측 기술을 사용합니다.
먼저 한자 깨짐 문제가 발생하는 이유를 분석해 보겠습니다. 이유는 매우 간단합니다. XMLHTTP는 응답을 받을 때 응답이 UTF8로 인코딩된 것으로 가정합니다. 따라서 GB2312 인코딩이 포함된 HTML을 UTF8 형식으로 처리합니다.
그렇다면 ASP 서버측 스크립팅 기술을 사용하는 것 외에 클라이언트측 솔루션은 없습니까? 대답은: 그렇습니다!
ASP를 사용하지 않고 VBScript 클라이언트 스크립트를 사용하여 메서드를 성공적으로 구현했으며, XMLHTTP가 HTML 페이지를 크롤링할 때 중국어 문자가 깨지는 문제를 해결했습니다.
일반적으로 사용되는 JScript 대신 VBScript를 사용하는 이유는 무엇입니까? XMLHTTP의 responseBody는 부호 없는 바이트 배열을 반환합니다. VBScript는 문자열을 조작하고 데이터 형식을 지정하는 다양한 기능은 물론 안전한 배열에 액세스하는 방법을 제공합니다. 이러한 함수나 메서드는 JScript에 존재하지 않습니다. 여기서는 VBScript의 내장 함수인 MidB, AscB, LenB 등을 사용하여 responseBody에 액세스해야 합니다.
논외로 말하자면, VBScript가 JScript보다 낫다는 점을 강조하려는 것은 아니지만 둘 다 고유한 특성을 가지고 있습니다. CSDN에 글을 쓰는 것은 이번이 처음입니다. 여러분의 지원에 감사드립니다. 이 글을 쓰는 데에는 두 가지 목적이 있습니다. 첫째, 자신을 훈련시키기 위한 것입니다. 둘째, 문제에 직면했을 때 문제를 분석하고 목표를 정하며 무슨 일이 일어나고 있는지, 왜 일어나는지 알 수 있기를 바랍니다.
나는 두 가지 응용 프로그램을 포함하는 Test.htm 코드를 제공했습니다. 자체 코드 가져오기와 다른 웹 페이지 코드 가져오기의 특정 스크립트는 다음과 같습니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN ">
<!-- 작성자: Xiao Lin, [email protected] -->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script 언어=VBScript>
함수 bytes2BSTR(vIn)
strReturn = ""
i = 1의 경우 LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
ThisCharCode < &H80이면
strReturn = strReturn & Chr(ThisCharCode)
또 다른
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
나는 = 나는 + 1
종료 조건
다음
bytes2BSTR = strReturn
함수 종료
함수 viewSource1()
DimXmlHttp
XmlHttp = CreateObject("Microsoft.XMLHTTP") 설정
XmlHttp.Open "GET", document.location.href, false
XmlHttp.setRequestHeader "콘텐츠 유형","텍스트/XML"
XmlHttp.보내기
희미한 HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
함수 종료
함수 viewSource2()
DimXmlHttp
XmlHttp = CreateObject("Microsoft.XMLHTTP") 설정
XmlHttp.Open "GET", " http://www.google.com ", false
XmlHttp.setRequestHeader "콘텐츠 유형","텍스트/XML"
XmlHttp.보내기
희미한 HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
함수 종료
</script>
<BODY bgcolor=gainsboro style='border:1pt Solid White'>
<TABLE 클래스=텍스트>
<tr>
<td class=text>XMLHTTP가 HTML 페이지를 가져올 때 중국어 왜곡 문자에 대한 완전한 클라이언트측 스크립트 솔루션</td>
</tr>
<tr>
<td class=button><button onclick=viewSource1()>자신의 웹페이지 코드 보기</button></td>
</tr>
<tr>
<td class=button><button onclick=viewSource2()>Google 홈페이지 코드 보기</button></td>
</tr>
</TABLE>
</BODY>
</HTML>