[XML] load zonder encoding mogelijk?

Pagina: 1
Acties:

  • Guffy
  • Registratie: Maart 2001
  • Laatst online: 30-09-2008
Ik wil een simpele xml laden

Stel ik heb 3 xmltjes :

xml1.xml
code:
1
2
3
<names> 
   <name>Patrick</name> 
</names>


xml2.xml
code:
1
2
3
<names> 
   <name>Pätrick</name> 
</names>


xml3.xml
code:
1
2
3
4
<?xml version="1.0" encoding="iso-8859-1" ?>
<names> 
   <name>Pätrick</name> 
</names>


Om de XML te laden gebruik ik
code:
1
2
3
4
5
set xml = Server.CreateObject("MSXML2.DOMDocument")
xml.async = false
xml.load("xml#.xml")
if xml.parseError.errorcode<>0 then Response.Write "Error" END IF
set xml = nothing


xml 1 & 3 geven geen error.
xml 2 wel (logisch door code probs)

maar nu komt het...

is het mogelijk xml2 zonder error te laden zonder xml2 zelf aan te passen?? :? :?

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 07:12

Nick_S

++?????++ Out of Cheese Error

Ik ben zelf niet goed in, uhh, wat is het? ASP? Maar bij een Google op MSXML2.DOMDocument "default encoding" kwam ik uit op een stukje code, waarbij ze de file inlezen d.m.v. een ADODB.stream, waaraan ze een encoding mee kunnen geven. Misschien werkt dit bij jou ook?

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub DOMLoadXml()
Dim docOut As MSXML2.DOMDocument
Dim stm As ADODB.stream
Dim strPath As String
Dim bolRet As Boolean
strPath = GetPath(CurrentDb.Name)
Set stm = New ADODB.stream
stm.Open
stm.Charset = "UTF-8"
stm.LoadFromFile strPath & "encUTF8.xml"
'Juts to check it out
MsgBox stm.Charset
stm.Position = 0
Set docOut = New MSXML2.DOMDocument
bolRet = docOut.loadXML(stm.ReadText)
If Not bolRet Then
MsgBox "The xml string was not loaded"
End If
'Just making sure
On Error Resume Next
Kill strPath & "test.xml"
docOut.Save strPath & "test.xml"
End Sub

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Guffy
  • Registratie: Maart 2001
  • Laatst online: 30-09-2008
Sorry, het is inderdaad ASP.
Ik ben er al een dikke dag mee aan stoeien in totaal en heb al eerder ADODB.Stream geprobeerd.

Ik heb jouw aangeleverde code even herschreven zodat ik hem kon gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
strPath = "C:\"
Set stm = Server.CreateObject("ADODB.Stream")  
stm.Open
stm.Charset = "iso-8859-1"
stm.LoadFromFile strPath & "xml2.xml"
'Juts to check it out
Response.Write stm.Charset
stm.Position = 0
set docOut = Server.CreateObject("MSXML2.DOMDocument")
bolRet = docOut.loadXML(stm.ReadText)
If Not bolRet Then
Response.Write "The xml string was not loaded"
End If
'Just making sure
On Error Resume Next
docOut.Save strPath & "test.xml"


Helaas... het de test.xml die hij eruit poept is dit
code:
1
2
3
<names>
    <name>PÃ&curren;trick</name>
</names>


:/ :/

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 07:12

Nick_S

++?????++ Out of Cheese Error

Is dat bestand ook met die encoding weg geschreven? Wat is de uitvoer van:
ASP:
1
stm.Charset

Je kan zeker weten, dat je bestand met de juiste encoding is weg geschreven, door een goeie teksteditor te gebruiken. Deze kunnen bestanden met diverse encodings wegschrijven. (Textpad, editplus)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Guffy schreef op woensdag 10 mei 2006 @ 15:40:
Ik wil een simpele xml laden

Stel ik heb 3 xmltjes :

xml1.xml
code:
1
2
3
<names> 
   <name>Patrick</name> 
</names>


xml2.xml
code:
1
2
3
<names> 
   <name>Pätrick</name> 
</names>


xml3.xml
code:
1
2
3
4
<?xml version="1.0" encoding="iso-8859-1" ?>
<names> 
   <name>Pätrick</name> 
</names>


Om de XML te laden gebruik ik
code:
1
2
3
4
5
set xml = Server.CreateObject("MSXML2.DOMDocument")
xml.async = false
xml.load("xml#.xml")
if xml.parseError.errorcode<>0 then Response.Write "Error" END IF
set xml = nothing


xml 1 & 3 geven geen error.
xml 2 wel (logisch door code probs)

maar nu komt het...

is het mogelijk xml2 zonder error te laden zonder xml2 zelf aan te passen?? :? :?
Tuurlijk. xml2 gewoon als utf-8 wegschrijven. Dat is namelijk een default encoding voor XML.

Achtergrond: ä is een karakter, geen getal of byte. Afhankelijk van de gekozen encoding wordt ä met een of meer bytes ge-encode.

Wat je bedolet met "xml2 aanpassen" is daarom waarschijnlijk niet wat je verwacht. xml is karakter-georienteerd. Een andere encoding van een XML fragment is dus dezelfde XML, maar levert andere bytes op.Je hebt hier echter bytes 9in een file). Die bytes bevatten dan de waarschijnlijk de iso-8859-1 encoding van ä, terwijl het een utf-8 encoding had moeten zijn. De XML parser zal om het bestand te begrijpen eerst de UTF-8 tekst moeten inlezen, en dan pas kun je op zoek naar de eerste <. Daar gaat het al fout; de byte waarvan je denkt dat het ä is wordt gelezen als de lead byte van een utf-8 multibyte karakter. De volgende byte is een 74 (ASCII t) en dat is geen valide tweede byte in een UTF-8 multibyte encoding.

Kortom, de omzetting van bytes naar karakters faalt voordat de XML parser uberhaupt op zoek kan naar het eerste < karakter.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Guffy
  • Registratie: Maart 2001
  • Laatst online: 30-09-2008
okidoki de oplossing lag in het omzetten van binary naar string met
<?xml version='1.0' encoding='iso-8859-1'?>
ervoor geplakt

tnx
Pagina: 1