Já faz algum tempo que percebi que o componente para requisição HTTP da Microsoft conhecido como XMLHTTP tem um sério problema na leitura de páginas que contenham acentos.

Como não encontrei nenhuma solução no site da Microsoft, desenvolvi a minha própria e que funciona perfeitamente.

A solução consiste na utilização de uma função que converte os dados em formato Binário para String (chamada BinaryToString), desta forma ao resgatar o conteúdo de uma URL é preciso trazê-lo somente em formato binário e depois convertê-lo. Desta forma não ocorre mais os problemas de acentuação.


Public Function BinaryToString(xBinary)  
    Dim Binary  
    Dim RS, LBinary  
    If VarType(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary  
    Const adLongVarChar = 201  
    Set RS = CreateObject("ADODB.Recordset")  
    LBinary = LenB(Binary)  
    If LBinary>0 Then 
        RS.Fields.Append "mBinary", adLongVarChar, LBinary  
        RS.Open  
        RS.AddNew  
        RS("mBinary").AppendChunk Binary   
        RS.Update  
        BinaryToString = RS("mBinary")  
    Else 
        BinaryToString = "" 
    End If 
    Set RS = Nothing 
End Function 

Public Function MultiByteToBinary(MultiByte)  
    Dim RS, LMultiByte, Binary  
    Const adLongVarBinary = 205  
    Set RS = CreateObject("ADODB.Recordset")  
    LMultiByte = LenB(MultiByte)  
    If LMultiByte>0 Then 
        RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte  
        RS.Open  
        RS.AddNew  
        RS("mBinary").AppendChunk MultiByte & ChrB(0)  
        RS.Update  
        Binary = RS("mBinary").GetChunk(LMultiByte)  
    End If 
    Set RS = Nothing 
    MultiByteToBinary = Binary  
End Function 

Declaração das variáveis:


Dim objXmlHttp  
Dim Url  
Dim Conteudo  

Inicialização do objeto:

Set objXmlHttp  = Server.CreateObject("MSXML2.XMLHTTP")

Url do Site:


Url = "http://rss.terra.com.br/0,,EI4795,00.xml"

Resgatando os dados da URL via HTTP:


objXMLHttp.Open "GET", Url, False 
objXMLHttp.Send  

Utilizando a função BinaryToString não haverá mais problemas com acentos.


Conteudo = BinaryToString(objXmlHttp.ResponseBody) 
Response.ContentType = "text/xml" 
Response.Write Conteudo  

Destruição do objeto:


Set objXmlHttp  = Server.CreateObject("MSXML2.XMLHTTP")  

Public Function BinaryToString(xBinary)
 Dim Binary
 Dim RS, LBinary
 If VarType(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary
 Const adLongVarChar = 201
 Set RS = CreateObject("ADODB.Recordset")
 LBinary = LenB(Binary)
 If LBinary>0 Then
  RS.Fields.Append "mBinary", adLongVarChar, LBinary
  RS.Open
  RS.AddNew
  RS("mBinary").AppendChunk Binary
  RS.Update
  BinaryToString = RS("mBinary")
 Else
     BinaryToString = ""
 End If
 Set RS = Nothing
End Function

Public Function MultiByteToBinary(MultiByte)
 Dim RS, LMultiByte, Binary
 Const adLongVarBinary = 205
 Set RS = CreateObject("ADODB.Recordset")
 LMultiByte = LenB(MultiByte)
 If LMultiByte>0 Then
  RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
  RS.Open
  RS.AddNew
  RS("mBinary").AppendChunk MultiByte & ChrB(0)
  RS.Update
  Binary = RS("mBinary").GetChunk(LMultiByte)
 End If
 Set RS = Nothing
 MultiByteToBinary = Binary
End Function

Declaração das variáveis:


Dim objXmlHttp
Dim Url
Dim Conteudo

Inicialização do objeto:


Set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP")

Url do Site:

Url = "http://rss.terra.com.br/0,,EI4795,00.xml"

Resgatando os dados da URL via HTTP:


objXMLHttp.Open "GET", Url, False
objXMLHttp.Send

Utilizando a função BinaryToString não haverá mais problemas com acentos.


Conteudo = BinaryToString(objXmlHttp.ResponseBody)
Response.ContentType = "text/xml"
Response.Write Conteudo

Destruição do objeto:

Set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP")

Confira também