Avatar billede wise Seniormester
28. april 2006 - 15:58 Der er 13 kommentarer og
1 løsning

Danske tegn i XMLblock i HTTP kald oversættes forkert.

Hej alle i kloge mennesker...

Jeg har et problem som nok ligger lidt på grænsen mellem en del katagorier.

Problemet er i EXCEL, ja VBA og ikke VB men forventer at folk her bedre kan svare end folk i PROGRAMMER-->EXCEL da det ikke er programmering.

Jeg kalder en webservice ved at sende en XML blok som parameter til en http server. (ja sådan kræver udbyderen at det gøres.)
I min XML block har jeg danske tegn, men disse danske tegn bliver ikke oversat korrekt.

Jeg kalder med WinHttp.WinHttpRequest, og giver så min xml tekst med.
Men når jeg kigger på den reelt sendte trafik bliver "TV2Ø" til "TV2\303\230", og ikke det korrekte "TV2\330".
Både http og XML'en henviser til codepage ISO-8859-1

Hvis jeg manuelt sender TV2\330 bliver dette modtaget korrekt, så det må være der hvor TV2Ø i XML'en oversættes og sendes at fejlen opstår.

Mit spørgsmål er derfor on nogen ved hvordan man bestemmer hvilket tegnsæt der bruges til at oversætte dette når jeg kalder
WinHttpRequest.send(minXML)

Jeg håber det blev forståeligt...

/Lasse
Avatar billede horsmark Nybegynder
28. april 2006 - 18:35 #1
har du følgende i din xml ?

<?xml version="1.0" encoding="ISO-8859-1"?>
Avatar billede horsmark Nybegynder
29. april 2006 - 08:57 #2
eller dette på http objectet

WinHttpRequest.setRequestHeader("Content-Type", 'text/xml;
charset="ISO-8859-1"')
Avatar billede wise Seniormester
30. april 2006 - 19:23 #3
Jeg har faktisk begge..
  Følgende tilføjes manuelt tekst-strengen med XML: <?xml version='1.0' encoding='ISO-8859-1'?>
og denne:
  WinHttpReq.setRequestHeader "CONTENT-TYPE", "text/plain; Charset=ISO-8859-1"
Den står til text/plain og ikke xml da det var sådan i den java connector jeg har kigget på ... jeg vil prøve at rette det til XML og se om det ændre noget...

Men her er det som går over kablet fra mit excel ark..
---
PUT /cgi-bin/pmixmlo?HjhH612a HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: 500
Accept: */*
Content-Type: text/plain; Charset=UTF-8
Host: marathon.ium.dk
Connection: Keep-Alive

<?xml version='1.0' encoding='ISO-8859-1'?><datatransfer type="order" calculationonly="False" country="dk" companyid="IUM" username="SNAP" password="anything" userid="OSMI"><order id="36000_000001" planid="5215" mediaid="TV2.." status="B"><heading></heading><insertiondate>2006-01-02</insertiondate><enddate>2006-01-15</enddate><format>30</format><grosscost currency="DKK"><total>100000</total></grosscost><alternative_order_nr></alternative_order_nr><placement>dsa</placement></order></datatransfer>
---

og her er et fra JAVA programmet som virker...
---
PUT /cgi-bin/pmixmlo?HjhH612a HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: 500
Accept: */*
Content-Type: text/plain; Charset=UTF-8
Host: marathon.ium.dk
Connection: Keep-Alive

<?xml version='1.0' encoding='ISO-8859-1'?><datatransfer type="order" calculationonly="False" country="dk" companyid="IUM" username="SNAP" password="anything" userid="OSMI"><order id="36000_000001" planid="5215" mediaid="TV2.." status="B"><heading></heading><insertiondate>2006-01-02</insertiondate><enddate>2006-01-15</enddate><format>30</format><grosscost currency="DKK"><total>100000</total></grosscost><alternative_order_nr></alternative_order_nr><placement>dsa</placement></order></datatransfer>
---

Det som man ikke kan se er at TV2.. og TV2. faktisk dækker over forskellige koder.
Den som virker: TV2\330
Den som ikke virker: TV2\303\230

Jeg vil prøve text/XML for at se om det ændre noget.
Avatar billede horsmark Nybegynder
30. april 2006 - 19:32 #4
oki sig lige til når du har testet om text/xml var det der skulle til...
Avatar billede wise Seniormester
30. april 2006 - 20:16 #5
Ovr, opdagede lige at det var samme blok jeg havde kopiet ind 2 gange.. dette er den som virker...
POST /cgi-bin/pmixmlo?HjhH612a HTTP/1.1
CONTENT-TYPE: text/plain
User-Agent: Java/1.5.0_04
Host: marathon.ium.dk
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 431


<?xml version="1.0" encoding="ISO-8859-1"?><datatransfer calculationonly="false" companyid="IUM" country="dk" password="anything" type="order" userid="LSZ" username="SNAP"><order id="" mediaid="TV2." planid="5215" status="P"><grosscost currency="DKK"><total>100000</total></grosscost><heading>TV  Demo</heading><placement>Demo</placement><insertiondate>2005-11-07</insertiondate><enddate>2005-12-04</enddate></order></datatransfer>
Avatar billede wise Seniormester
30. april 2006 - 20:37 #6
og text/xml ændret intet...
Det burde vel heller ikke ændre hvordan EXCEL oversatte det inden den sendte det (gør det?).

Som sagt hvis jeg manuelt sender TV2\330 så oversættes det korrekt til TV2Ø, så det må være EXCELs oversætteslse af Ø til \303\230 som fejler...
Avatar billede horsmark Nybegynder
30. april 2006 - 21:26 #7
pas :-|
Avatar billede wise Seniormester
30. april 2006 - 23:45 #8
Ok, tak for forsøget. Så er det i det mindste ikke blot en eller anden oplagt fejl som jeg BURDE have opdaget :-)

/Lasse
Avatar billede horsmark Nybegynder
01. maj 2006 - 08:10 #9
hmm er det en fil du læser og derefter sender som xml ?
Avatar billede horsmark Nybegynder
01. maj 2006 - 08:12 #10
eller er det on the fly generering direkte i excell ?
Avatar billede wise Seniormester
01. maj 2006 - 13:33 #11
Selve XML'en er lavet manuelt i denne funktion, og den holdes som en string indtil den medgives som parameter til winhttprequest.send... Dette skyldes at 90% af XML'en er statisk, så jeg blot inføjer nogle ordrenumre med mere i strengen inden den sendes.

Sålænge den holdes som string viser den fint "Ø"'et, men når jeg via en sniffer kigger på hvad den reelt sender så bliver det oversat til TV2\303\230...

    Dim WinHttpReq As WinHttp.WinHttpRequest
    Set WinHttpReq = New WinHttpRequest
    'Allow all type of erros in the SSL certificate
    WinHttpReq.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = 13056

    ' Create an array to hold the response data.
    Dim d() As Byte
 
   
    ' Assemble an HTTP Request.
    WinHttpReq.Open "PUT", "https://" + MarathonServer + "/cgi-bin/pmixmlo?HjhH612a", False
    WinHttpReq.setRequestHeader "CONTENT-TYPE", "text/xml; Charset=ISO-8859-1"

    ' Send the HTTP Request.
    WinHttpReq.send (realxmldoc)
       
    Set responsdoc = New DOMDocument40
    responsdoc.LoadXml WinHttpReq.responseText
Avatar billede horsmark Nybegynder
01. maj 2006 - 13:46 #12
nå sidste totalt skud i tågen er dette...

WinHttpReq.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"

...har ikke den ringeste ide om det spiller men hvis det ikke gør må jeg melde pas og jeg syns du skal lukke spørgdsmålet og oprette et nyt...
Avatar billede wise Seniormester
01. maj 2006 - 20:32 #13
Nej desværre, ingen ændring.
Tak for forsøget - igen !

Jeg lukker dette spr, og genstiller et når jeg forhåbentlig har kunne stille det lidt mere præcist, jeg vil lige prøve at arbejde lidt mere selv...
Avatar billede horsmark Nybegynder
01. maj 2006 - 20:48 #14
fino lykke til :-D

Dagens citat:
The devil dwells benieth the details...

:-(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester