Toon posts:

[ASP] MSXML2.ServerXMLHTTP.4.0 ë wordt ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hetvolgende probleem.

Voor het versturen van een HTML mailing van een vrij groot asp bestand gebruik ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
Set objHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
If NOT IsObject(objHttp) Then
   Set objHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
End If
objHTTP.Open "GET", "http://123.456.789.123/lap.asp", false
objHTTP.Send
strStatus = CInt(objHttp.Status)
strResponse = objHttp.responseText
Set objHttp = Nothing
response.write strResponse 
%>

Hierin wordt bijvoorbeeld het ë teken vervangen door een ?.

De lap.asp pagina zelf wordt wel prima weergegeven, maar zodra je die lap.asp pagina via de ServerXMLHTTP weer laat geven gaat het dus o.a. bij dit teken mis.

Wat is hieraan te doen ??????

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Heeft wellicht te maken met de charset...

Misschien kan dit je helpen?

Vormkracht10


Verwijderd

Topicstarter
Heb ik geprobeerd, maar helpt niet.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
misschien dat je ff hiernaar moet kijken :? (is dus voordat de charset van de response wordt bepaald)

code:
1
objXMLHTTP.setRequestHeader "CharSet", "ISO-8859-1"


gevonden met : [google=charset xmlhttp]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Verwijderd

Topicstarter
faabman schreef op 10 april 2004 @ 17:41:
misschien dat je ff hiernaar moet kijken :? (is dus voordat de charset van de response wordt bepaald)

code:
1
objXMLHTTP.setRequestHeader "CharSet", "ISO-8859-1"


gevonden met : [google=charset xmlhttp]
Nope, blijft 't zelfde :'(

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Topics over dit probleem heb ik vaker voorbij zien komen en volgens mij tot op heden steeds onopgelost. Omdat ik het probleem zelf ook regelmatig tegen ben gekomen heb ik er toch eens wat nader naar gekeken.
Wat je wil is het converteren van een html-output naar de juiste characterset. Dit kan het xmlhttp component niet, waarmee het hopeloos te kort schiet ;)

echter, we hebben ook nog ADODB, en specifieker adodb.stream :) Hierin kun je een binaire stream zetten en converteren naar tekst, in de juiste character set...

wat ik nu doe om een pagina goed te veralen is dit:
Visual Basic:
1
2
3
    header = xmlhttp.getResponseHeader("Content-type")
    charset = getcharset(header)
    str_html_in_de_goede_charset = convertCharset(xmlhttp.responsebody,charset)


Functie getcharset pakt dus de character set uit de headers. Hierbij gebruik ik regexp, als dit abacadabra is, lees dan maar even over de functie heen ;)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getcharset(str)
    getcharset = pak(str,"(.*?)charset\=(.*?)$")
end function

function pak(strPhrase, strMatchPattern)
    Set objRegEx = New RegExp 
    objRegEx.Global = True
    objRegEx.IgnoreCase = True
    objRegEx.Pattern = strMatchPattern 
    
    'create the collection of matches
    Set Matches = objRegEx.Execute(strPhrase) 
    if matches.count>0 then pak = matches(0).submatches(1)    
End function 


vervolgens dus nog de truuk, het converteren naar de juiste charset:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function convertCharset(binSafeArray, CharSet)
  Const adTypeText = 2
  Const adTypeBinary = 1
  
  Dim BinaryStream 'As New Stream
  Set BinaryStream = CreateObject("ADODB.Stream")
  
  BinaryStream.Type = adTypeBinary
  
  BinaryStream.Open
  BinaryStream.Write binSafeArray
  
  
  BinaryStream.Position = 0
  BinaryStream.Type = adTypeText
  
  If Len(CharSet) > 0 Then
    BinaryStream.CharSet = CharSet
  Else
    BinaryStream.CharSet = "ISO-8859-1" 'default, west-europees
  End If

  convertCharset = BinaryStream.ReadText
End Function


Ik heb het net af, dus er zitten vast wat bugjes in, maar de eerste tests lijken erop dat alles prima werkt met iig west europees en cyrillic :)

offtopic:
xmlhttp is uiteraard het xmlhttp object waarmee net een send is gedaan ;)

kaart != map && bottel != fles
Wacht op antwoord

Pagina: 1