Ik heb het volgende stukje code in ASP (het is versimpeld, het meeste gebeurd eigenlijk in een VB6 COM-component). Het laadt een unicode document van disk, en schrijft het in een aangegeven encoding naar de http-response:
Als ik in het bestand tekens gebruik die alleen in iso-8859-1 voorkomen, dan gaat het teruggeven goed voor utf-8, iso-8859-1, us-ascii en windows-1252. Bij us-ascii wordt een ë (e-trema) vervangen door de letter e, omdat een e-trema niet in us-ascii voorkomt (wel in de andere codepages). Dit is dus gedraagt zich zo als verwacht.
Maar stel dat ik een euro-teken gebruik, die wel in utf-8 en windows-1252 voorkomt, maar niet in zowel us-ascii als iso-8859-1, dan krijg ik bij die laatste twee een leeg document terug
Bij utf-8 en windows-1252 gaat het goed (ik heb het gecontroleerd met netmon2/ethereal).
Ik zou verwachten dat ik ipv de e-trema een vraagteken (of de letter E) op die plek terug zou krijgen. Ik heb getest op zowel Windows NT4 als op Windows 2000 Server. Ik gebruik MSXML 4.0 SP1.
Wie weet hoe dit kan, en hoe ik dit kan verhelpen, want het is niet acceptabel dat m'n applicatie een lege pagina teruggeeft (dat is nl. niet valid xml...)
code:
1
2
3
4
5
6
7
8
| doc=CreateObject("MSXML2.DOMDocument")
doc.load fileName
'wijzig hier de encoding-attribuut van de processing instruction
doc.firstChild.replaceNode( ... )
'zet hier de http content-type en charset parameter
Response.ContentType="text/xml"
Response.CharSet= ...
doc.save Response |
Als ik in het bestand tekens gebruik die alleen in iso-8859-1 voorkomen, dan gaat het teruggeven goed voor utf-8, iso-8859-1, us-ascii en windows-1252. Bij us-ascii wordt een ë (e-trema) vervangen door de letter e, omdat een e-trema niet in us-ascii voorkomt (wel in de andere codepages). Dit is dus gedraagt zich zo als verwacht.
Maar stel dat ik een euro-teken gebruik, die wel in utf-8 en windows-1252 voorkomt, maar niet in zowel us-ascii als iso-8859-1, dan krijg ik bij die laatste twee een leeg document terug
Ik zou verwachten dat ik ipv de e-trema een vraagteken (of de letter E) op die plek terug zou krijgen. Ik heb getest op zowel Windows NT4 als op Windows 2000 Server. Ik gebruik MSXML 4.0 SP1.
Wie weet hoe dit kan, en hoe ik dit kan verhelpen, want het is niet acceptabel dat m'n applicatie een lege pagina teruggeeft (dat is nl. niet valid xml...)