Toon posts:

[ASP/JScript] Probleem converteren euroteken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Om een externe ASP-pagina in een variabele te laden gebruik ik het XML-object. Dit werkt perfect. Echter wanneer ik de inhoud van de betreffende variabele in een bestand wil wegschrijven krijg fouten wanneer er een euroteken voorkomt. Nu heb ik geprobeerd om het euroteken te vervangen. Echter lukt het vervangen niet omdat het euroteken schijnbaar als vraagteken weergeven wordt wanneer ik de geladen pagina output via een Response.write. Wanneer ik vervolgens als test de vraagtekens vervang, merk ik dat 'echte' vraagtekens wel vervangen worden, maar 'eurovraagtekens' niet.

Kortom hoe kan ik de eurotekens vervangen voor hun HTML-equivalent? Bestaat er misschien een soort van HTML-entities-functie voor ASP?
ASP:
1
2
3
4
5
6
7
8
9
var oXML = Server.createObject("Microsoft.XMLHTTP");

oXML.open("GET", "http://home.planet.nl/~kempe433/thomas/test.htm", false);
oXML.send();
        
var sResult = oXML.responseText;
        
sResult = sResult.replace(/€/g, "€");
Response.Write(sResult);

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Je zit met een Encoding probleem.

probeer eens de encoding te setten, (ISO-8859-15 of UTF-8)

offtopic:
is al heeeeel vaak voorbij gekomen op GoT en op Google.


Edit:
En? Heeft het geholpen?

[ Voor 30% gewijzigd door TeeDee op 09-08-2005 15:33 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Nee helaasch. Zowel het instellen van de encoding (setRequestHeader("Content-Type", "text/html; charset=iso-8859-1")) als het gebruiken van WinHttp.WinHttpRequest.5 i.p.v. Microsoft.XMLHTTP heeft niet geholpen om het eurotekenprobleem op te lossen. Onderstaand de code die ik nu gebruik:

code:
1
2
3
4
5
6
7
8
9
var oWinHTTP = new ActiveXObject("WinHttp.WinHttpRequest.5");
            
oWinHTTP.open("GET", "http://home.planet.nl/~kempe433/thomas/test.htm", 0);
oWinHTTP.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");
oWinHTTP.send("");
        
var sResult = oWinHTTP.responseText;
        
Response.Write(sResult);

[ Voor 22% gewijzigd door Verwijderd op 09-08-2005 15:47 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

Weet je trouwens zeker of de planet webserver de html documenten daadwerkelijk wel als iso-8859-1 verstuurt?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Hij moet ze ook als ISO-8859-15 versturen.
Janoz schreef op dinsdag 09 augustus 2005 @ 15:58:
Weet je trouwens zeker of de planet webserver de html documenten daadwerkelijk wel als iso-8859-1 verstuurt?
Volgens mij headers komt ie gewoon als -1 binnen ipv -15.

Hmm.... lijkt erop dat ie dat niet doet.
Dan moet het in MsXmlHTTP zitten.

[ Voor 85% gewijzigd door TeeDee op 09-08-2005 16:05 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


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

j_du_pee

du pain, du vin, du pee

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


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

Ik doelde meer op het feit dat er een verschil zou kunnen zitten in de content type die in de header van het response staat (door planet erin gezet dus) en degene die in de html genoemd wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Is een goeie. De stream aanpakken en die converten.
Zal deze even bookmarken.

Het combineren van de functies van j_du_pee en de content type simpelweg op 8859-1 zou moeten werken (zojuist getest).

[ Voor 22% gewijzigd door TeeDee op 09-08-2005 16:22 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Bij onderstaande code krijg ik alleen 'text/html' dus zonder de encoding terug:

code:
1
2
3
4
5
6
var oXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.4.0");
            
oXMLHTTP.open("GET", "http://home.planet.nl/~kempe433/thomas/test.htm", 0);
oXMLHTTP.send("");

Response.Write(oXMLHTTP.getResponseHeader("Content-type"));

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Verwijderd schreef op dinsdag 09 augustus 2005 @ 16:33:
[...]


Bij onderstaande code krijg ik alleen 'text/html' dus zonder de encoding terug:

code:
1
2
3
4
5
6
var oXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.4.0");
            
oXMLHTTP.open("GET", "http://home.planet.nl/~kempe433/thomas/test.htm", 0);
oXMLHTTP.send("");

Response.Write(oXMLHTTP.getResponseHeader("Content-type"));
Pak je de complete code mee? Dus ook de bijbehorende functies?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op dinsdag 09 augustus 2005 @ 16:34:
[...]


Pak je de complete code mee? Dus ook de bijbehorende functies?
Nee, want ik wil eerst weten of ik uberhaupt een encoding terug krijg. Zo te zien krijg ik helemaal geen encoding terug.

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

j_du_pee

du pain, du vin, du pee

sja, daar kun jij dan weinig aan doen. De maker van die home.planet pagina kan hooguit een meta-tag meegeven, of er moet op de server een header worden ingesteld. Als je de default encoding van -1 gebruikt zit je in dit geval wel veilig denk ik ;)

Zodra je het geheel naar een txt gaat schrijven moet je bij het format van je file ook nog even unicode opgeven, anders gaat het daar waarschijnlijk nog mis...

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


Verwijderd

Topicstarter
j_du_pee schreef op dinsdag 09 augustus 2005 @ 16:37:
sja, daar kun jij dan weinig aan doen. De maker van die home.planet pagina kan hooguit een meta-tag meegeven, of er moet op de server een header worden ingesteld. Als je de default encoding van -1 gebruikt zit je in dit geval wel veilig denk ik ;)

Zodra je het geheel naar een txt gaat schrijven moet je bij het format van je file ook nog even unicode opgeven, anders gaat het daar waarschijnlijk nog mis...
De maker van de planetpagina ben ik zelf. Het was even een testpagina. ;) Ik wilde de codering aflezen i.v.m. compatibiliteit. Maar een default van -1 gebruiken is op zich ook geen probleem. :)

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

j_du_pee

du pain, du vin, du pee

vandaar dus het volgende stukje code
Visual Basic:
1
2
3
4
5
  If Len(CharSet) > 0 Then
    BinaryStream.CharSet = CharSet
  Else
    BinaryStream.CharSet = "ISO-8859-1" 'default, west-europees
  End If 

;)

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


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Heb even zitten rommelen, en dit werkt op mijn testmachine in ieder geval.

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
25
26
27
28
29
30
31
<% Response.Charset= "ISO-8859-1" %>
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-15" 'default, west-europees
    End If

    convertCharset = BinaryStream.ReadText
End Function

Set xmlhttp = CreateObject("Microsoft.XMLHttp")
xmlhttp.Open "GET", "http://localhost/tontest/euro.html", false
xmlhttp.Send

response.write convertCharset(xmlhttp.responsebody,"ISO-8859-1")

Edit: That's it. Ik trek me even terug en ga me even concentreren op mijn werk. Ben op dit moment onzin aan het uitkramen.

[ Voor 44% gewijzigd door TeeDee op 09-08-2005 16:49 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op dinsdag 09 augustus 2005 @ 16:45:
Heb even zitten rommelen, en dit werkt op mijn testmachine in ieder geval.

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
25
26
27
28
29
30
31
<% Response.Charset= "ISO-8859-1" %>
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-15" 'default, west-europees
    End If

    convertCharset = BinaryStream.ReadText
End Function

Set xmlhttp = CreateObject("Microsoft.XMLHttp")
xmlhttp.Open "GET", "http://localhost/tontest/euro.html", false
xmlhttp.Send

response.write convertCharset(xmlhttp.responsebody,"ISO-8859-1")

Edit: That's it. Ik trek me even terug en ga me even concentreren op mijn werk. Ben op dit moment onzin aan het uitkramen.
Zou je het testbestand nog even terug willen zetten? Met mijn eigen testbestand krijg ik het probleem nog steeds niet opgelost. Onderstaand de JScriptvertaling van jouw script dat ik gebruik. Zou je anders mijn JScriptvertaling eens op je machine willen testen? Dan weet ik in ieder geval of het aan de vertaling ligt of dat de functie sowieso niet werkt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function convertCharset(aBinSafeArray)
{
    var nAdTypeBinary = 1;
    var nAdTypeText   = 2;
          
    var oBinaryStream = new ActiveXObject("ADODB.Stream");
                
    oBinaryStream.type = nAdTypeBinary;
            
    oBinaryStream.open();
    oBinaryStream.write(aBinSafeArray);
          
    oBinaryStream.position = 0;
    oBinaryStream.type = nAdTypeText;
          
    oBinaryStream.charSet = "ISO-8859-15";
            
    return oBinaryStream.readText();
}
        
var oXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.4.0");
            
oXMLHTTP.open("GET", "http://home.planet.nl/~kempe433/thomas/test.htm", 0);
oXMLHTTP.send("");
        
Response.write(convertCharset(oXMLHTTP.responseBody));

Edit:

De functie werkt dus wel, maar ik krijg nog steeds vraagtekens i.p.v eurotekens.

[ Voor 12% gewijzigd door Verwijderd op 10-08-2005 11:15 ]


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

j_du_pee

du pain, du vin, du pee

heb het ff voor je getest, maar "ISO-8859-15", moet "ISO-8859-1" zijn, dan doet hij het :)

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


Verwijderd

Topicstarter
Fantastisch!! Heel hartelijk bedankt!
Pagina: 1