As pessoas costumam dizer que sempre se preocupam com o problema de caracteres chineses distorcidos ao usar XMLHTTP. Verifiquei algumas informações e o resultado me decepcionou. Todo mundo usa tecnologia ASP do lado do servidor para resolver esse problema.
Vamos primeiro analisar por que ocorre o problema dos caracteres chineses ilegíveis. A razão é muito simples: quando XMLHTTP obtém a resposta, ele assume que a resposta é codificada em UTF8. Ele trata HTML contendo codificação GB2312 como formato UTF8.
Então, além de usar a tecnologia de script do lado do servidor ASP, não há solução do lado do cliente? A resposta é: sim!
Usei o script cliente VBScript para implementar o método com êxito sem usar ASP e resolvi o problema de caracteres chineses distorcidos quando o XMLHTTP rastreia páginas HTML.
Por que usar VBScript em vez do JScript comumente usado? O responseBody do XMLHTTP retorna uma matriz de bytes não assinados. VBScript fornece muitas funções para manipulação de strings e formatação de dados, bem como métodos para acessar arrays seguros. Essas funções ou métodos não existem em JScript. Aqui precisamos usar as funções integradas do VBScript: MidB, AscB, LenB, etc., para acessar o responseBody.
Para divagar, não estou enfatizando que o VBScript é melhor que o JScript, mas ambos têm características próprias. Esta é a primeira vez que escrevo um artigo sobre CSDN. Obrigado pelo seu apoio. Há dois propósitos ao escrever este artigo: primeiro, treinar-se; segundo, espero que, ao encontrar problemas, você possa aprender a analisá-los, ser direcionado e saber o que está acontecendo e por quê.
Forneci o código Test.htm, que inclui duas aplicações: obtenção de código próprio e obtenção de outros códigos de páginas web. O script específico é o seguinte:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN. ">
<!-- Autor: Xiao Lin, [email protected] -->
<HTML>
<CABEÇA>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<linguagem de script=VBScript>
Função bytes2BSTR(vIn)
strReturn = ""
Para i = 1 para LenB(vIn)
EsteCharCode = AscB(MidB(vIn,i,1))
Se ThisCharCode <&H80 Então
strReturn = strReturn & Chr(ThisCharCode)
Outro
PróximoCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
eu = eu + 1
Terminar se
Próximo
bytes2BSTR = strReturn
Função final
Função viewSource1()
dimXmlHttp
definir XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", document.location.href, falso
XmlHttp.setRequestHeader "Tipo de conteúdo","texto/XML"
XmlHttp.Enviar
escurecer HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Função final
Função viewSource2()
dimXmlHttp
definir XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", " http://www.google.com ", falso
XmlHttp.setRequestHeader "Tipo de conteúdo","texto/XML"
XmlHttp.Enviar
escurecer HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Função final
</script>
<BODY bgcolor=gainsboro style='border:1pt solid white'>
<TABELA classe=texto>
<tr>
<td class=text>Solução completa de script do lado do cliente para caracteres chineses distorcidos quando XMLHTTP obtém páginas HTML</td>
</tr>
<tr>
<td class=button><button onclick=viewSource1()>Visualize o código da sua própria página da web</button></td>
</tr>
<tr>
<td class=button><button onclick=viewSource2()>Ver código da página inicial do Google</button></td>
</tr>
</TABELA>
</BODY>
</HTML>