Avatar billede mik789 Nybegynder
04. november 2004 - 08:43 Der er 7 kommentarer og
1 løsning

charset mhp kode eller output?

I forlængelse af http://eksperten.dk/spm/557170 vil jeg da godt lige have en ting på det rene. Jeg har altid forstået det sådan at angivelsen af charset i f.eks. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> er med henblik på de tegn der bruges i kodedokumentet, ikke med henblik på outputtet i browseren. Hvis jeg f.eks. i et dokument med den nævnte angivelse (iso-8859-1) bruger tegn der ligger uden for dette charset vil koden ikke gå igennem valideringen uden fejl for netop at bruge ikke-tilladte karakterer. De ses i outputtet fra W3C validatoren som små firkantede felter med et spørgsmålstegn i midten. Hvis jeg så i stedet angiver de ulovlige karakterer med decimal- eller hexkoder, er der ingen problemer. Valideringen går igennem. Hvis jeg VIL bruge ikke-kodede specialtegn uden for iso-8859-1 i koden, skal jeg i stedet angive UTF-8 som charset. Så går det igennem validatoren. Det er jo logisk nok. Altså charset kun med henblik på selve kode-dokumentet.

Men samtidig er det jo underligt at i XML opfattes UTF-8 som default charset (hvis ikke andet er angivet). For XML kode accepterer slet ikke non-ascii tegn. Alle disse tegn skal kodes enten med html-entities (nogle få), decimal- eller hexkode. Og hvorfor så have UTF-8 som charset (der jo netop rummer alle disse specielle karakterer)? Man skulle jo tro at meningen med UTF-8 var at bruge specialtegn i dokumentkoden. Betyder det så at angivelsen af charset alligevel kun er med henblik på outputtet (i en browser f.eks.) og slet ikke med henblik på koden? Så er det bare mærkeligt at validatoren accepterer mine hex-kodede specialtegn, også selv om charset er sat til iso-8859-1.
Avatar billede mik789 Nybegynder
05. november 2004 - 08:09 #1
1) for få point?
2) sp. er ufroståligt?
3) I ved det ikke?
4) ?

//mik
Avatar billede mik789 Nybegynder
05. november 2004 - 08:10 #2
det bliver selvfølgelig ikke mere forståligt at 'sålfejl' som "ufroståligt"
Avatar billede mik789 Nybegynder
07. november 2004 - 12:15 #3
jamen så må man vel selv... ;-)

Kiggede på http://w3.org/TR/html4/charset.html

Af den fremgår at man skelner mellem:

1) Character Set som blot er repertoiret af mulige tegn.
2) Character Encoding som fortæller browseren hvordan dokumentets tegn skal vises. Det en denne der (lidt forvirrende i forhold til punkt 1) angives med "charset=", f.eks. i metatag'et, med navnet på det ønskede charset, f.eks. iso-8859-1 eller utf-8.
3) Character References som er tegnenes kodeværdi, dvs. enten nummerisk (decimal eller hex) eller html-entities. Det fremgår at for mere specielle non-ascii unicode tegn er hex-tal det mest sikre. Disse references er uafhængige af charset-angivelsen under punkt 2: "Character references are a character encoding-independent mechanism for entering any character from the document character set."

Dette bekræfter at olobole har ret i sp. http://eksperten.dk/spm/557170 : charset går på visningen i browseren, ikke (som jeg hævdede) på hvilke tegn der er gyldige i kode-dokumentet. Det forklarer også hvorfor at tegnene vises korrekt uanset om jeg bruger charset iso-8859-1 eller utf-8.
3)
Avatar billede mik789 Nybegynder
07. november 2004 - 12:24 #4
Det der så stadig undrer mig er at hvis jeg bruger dansk æøå i et dokuement med charset=utf-8 får jeg denne meddelelse i validatoren:

Sorry, I am unable to validate this document because on lines 8-9  it contained one or more bytes that I cannot interpret as utf-8 (in other words, the bytes found are not valid values in the specified Character Encoding). Please check both the content of the file and the character encoding indication.

det gør jeg ikke når der angives iso-8859-1. Jeg troede at utf-8 indeholdt alle unicode tegnene inkl. dem i iso-8859-1 ?
Avatar billede mik789 Nybegynder
07. november 2004 - 12:35 #5
og fejlen er kun med doctype xhtml 1.0 - ikke med html 4.01 strict, så der er også en forskel
Avatar billede olebole Juniormester
07. november 2004 - 23:58 #6
<ole>

Er du opmærksom på, der er forskel på, hvilken encoding du vælger, når du gemmer filen? Gemmer du som ANSI, Unicode eller UTF-8?

/mvh
</bole>
Avatar billede mik789 Nybegynder
08. november 2004 - 01:00 #7
ole> Nej, ikke rigtig. Jeg ved at hvis filen indeholder tegn fra de udvidede unicode tegnsæt skal den gemmes i unicode eller utf-8 for at jeg kan se tegnene i selve kode-filen. Men hvad det betyder for visningen i browseren ved jeg ikke. Hvad er forskellen mellem de tre?
Avatar billede mik789 Nybegynder
09. november 2004 - 10:35 #8
OK, fandt denne lille artikel: http://www.klapmusen.dk/20020614
Den siger at man uden videre kan anvende specialtegn direkte i sit dokument hvis man bare gør to ting:

1) sætter charset til utf-8
2) gemmer i utf-8 format

Det er det sidste jeg ikke har gjort, som olebole også antyder 07/11-2004 23:58:53.
Det lyder jo meget enkelt. Dvs. slut med html-entities (bort set fra &amp;, &lt; og ander nødvendige entities) eller nummeriske koder.

ole> hvad mener du om det? har han ikke ret? hvorfor overhovedet bruge iso-8859-1 når det hele rummes i utf-8? Hvad skulle begrænsningerne være? Gamle browsere? Hvor gamle?
//mik
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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