Avatar billede duno Nybegynder
31. juli 2005 - 09:37 Der er 8 kommentarer og
2 løsninger

XML og specialtegn

Jeg har en kode:

abning = "<?xml version=""1.0"" encoding=""ISO-8859-1"" ?>"
generel = "<graph bgcolor=""ffeaea"" xaxisname=""Hojde"" yaxisname=""Vaegt"" yaxisminvalue=""0"" yaxismaxvalue=""150"" caption=""test"" >"
generel2 = "</graph>"

Heledinfil = abning & generel & dinduno & generel2

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.CreateTextFile(Server.Mappath("/forum3/Datah.xml"),true)
f.WriteLine("" & Heledinfil & "")
f.Close
set f=nothing
set fs=nothing

Koden bruger unikode ISO-8859-1, hvilket burde give adgang til ÆØÅ, men når jeg generere xml filen, laver den fejl, og indholdet af xml filen bliver en ulæselig omgang tegn.

Det er ganske få steder jeg skal bruge special tegnene, men eksempelvis i dette stykke er det nødvendigt

dinduno = dinduno & "<set name=""år"" value=""" & Record.Fields.Item("lbsh5u").Value & """color=""FFFFFF""/>"
Response.Write " <br>"

men hvorfor laver den fejl, når jeg efter min bedste overbevisning bruger den rigtige unikode.

læser man her bliver det nævnt at ISO-8859-1 er den eneste rigtige

http://www.klapmusen.dk/20020614

så hvad går der galt
Avatar billede softspot Forsker
31. juli 2005 - 10:33 #1
Umiddelbart vil jeg sige at UTF-8 er den eneste rigtige...

Det du skal være opmærksom på når du arbejder med encoding er at de steder hvor tekst til de resulterende filer hentes (f.eks. konstante strenge fra en asp-fil, eller tekst indlæst fra en tekstfil), skal være gemt i den encoding som du gerne vil have resultatet i, med mindre du laver en eksplicit konvertering fra den encoding som data er gemt i til den encoding data skal ende i. Det har været den hyppigste fejlkilde i de tilfælde jeg har arbejdet med encoding af tekst, herunder XML...

Det betyder altså at hvis du forventer at dine variable med xml-strenge skal kunne resultere i ISO-8859-1 strenge, så skal din asp-fil altså være gemt i den encoding for at det du har lavet fungerer.
Avatar billede duno Nybegynder
31. juli 2005 - 21:02 #2
hmm.. hvordan sikre man sig at det er sådan det er lavet, jeg har jo bare lavet en fil i dreamweaver, valgt at det skal være en asp, indtastet koden, og testet, jeg formoder at det skal være i meta´en, og der har jeg prøvet ISO-8859-1 og UTF-8 og UTF-16 (kendte ikke denne før jeg læste ovenstående side (se link))

siden er lige nu ISO-8859-1 i meta og den oprettede fil er også sat til ISO-8859-1, men jeg får stjerner, havelåger, og understreger over det hele i koden..

men jeg kan da lige teste igen med UTF-8
Avatar billede softspot Forsker
31. juli 2005 - 22:31 #3
Du kan tilsyneladende angive om filen skal gemmes i unicode når du opretter din textstream med FSO. Det er den 3. parameter der angiver om filen skal gemmes som Unicode eller ASCII (true giver Unicode).

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.CreateTextFile(Server.Mappath("/forum3/Datah.xml"), true, true)
f.WriteLine("" & Heledinfil & "")
f.Close
set f=nothing
set fs=nothing

Prøv det, for jeg ved ikke om det rent faktisk løser dit problem (Unicode er såvidt jeg ved et 16 bits format og UTF-8 er såvidt jeg har forstået 8 bits)... men som sagt prøv det lige først :)

Har i øvrigt lige skimmet det link du henviser til - og som jeg ser det siger han netop at ISO-8859-1 _IKKE_ er den rigtige encoding at bruge og at den er forældet. Tværtimod synes jeg han er af samme opfattelse som jeg mht. valg af encoding... men det kan være jeg ikke har fået pointen med - det var som sagt kun en skimmer :)
Avatar billede arne_v Ekspert
31. juli 2005 - 22:36 #4
ISO-8859-1 er ikke unicode

UTF-8 er det eneste som XML skal forstå, men jeg har aldrig mødt en XML parser
som ikke kunne læse ISO-8859-1

hvis du vil gemme i UTF-8 så bruge ADODB.Stream, eksempel:

Set stm = CreateObject("ADODB.Stream")
stm.Open
stm.Position = 0
stm.Charset = "UTF-8"
stm.WriteText "ABCÆØÅ"
stm.SaveToFile "C:\utf8.txt"
stm.Close

og jeg er ikke sikker på at vi overhovedet er på sporet af dit problem

men kan du ikke poste et eksempel på hvordan ÆØÅ ser ud ?
Avatar billede arne_v Ekspert
03. september 2005 - 18:41 #5
duno ?
Avatar billede duno Nybegynder
13. september 2005 - 09:17 #6
Hej arne

Undskyld svartiden, du var ikke glemt, jeg har bare lige hængt fast i et andet problem (dette er det man kan kalde et luksusproblem)

når jeg bruger utf-8 viser den ikke ø eks

jeg skriver i&#248;i resultatet bliver i (bemærk at alt efter det ønskede ø samt ø´et er forsvundet.)

skriver jeg iøi kommer der til at stå i(firkant)alue=

bruger jeg iso-8859-1 og skriver i&#248;i for jeg i som resultat

skriver jeg iøi kommer der til at stå i(firkant)alue=, hvad hulen gør jeg galt?

Og igen tak for interessen :o)

Duno
Avatar billede duno Nybegynder
22. oktober 2005 - 00:26 #7
Hmm.. meget mærkeligt, min udbyder har nu skiftet server og opgraderet hele systemet,

Nu bruger jeg iso-8859-1 til XML filen, og UTF-8 til den fil som henter XML filen, og det bliver nu vist korrekt, sætter jeg dem sammen i anden orden, så giver det mærkelige tegn.

Send mig et svar begge 2 så kan i dele i porten
Avatar billede softspot Forsker
22. oktober 2005 - 00:28 #8
Her har du et fra mig :)
Avatar billede arne_v Ekspert
22. oktober 2005 - 08:19 #9
ok
Avatar billede softspot Forsker
22. oktober 2005 - 17:28 #10
Tak for point :)
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