[CHARSET] Uitleg standaard karaktersets

Pagina: 1
Acties:
  • 283 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Hopelijk staat dit in het goede forum (anders SA).

Hieronder een klein stuk uit een verslag. Volgens mij klopt het op zich wel, maar het is mij nog niet helemaal duidelijk waarom UCS nu de standaard karakterset voor HTML is. Volgens mij worden charsets meestal aangegeven in HTTP Content-type header met bijvoorbeeld:
code:
1
Content-type: text/html; charset=utf-8
of in de header van het HTML-bestand:
code:
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Zo zijn toch ISO 8859-1 en UTF-8 veelgebruikte standaarden? Of kun je zeggen dat UTF de manier is om Unicode (= equivalent aan de karakterset zoals die in ISO 10646 staat) te encoderen?


Mijn tekst:
De ASCII karakterset is niet voldoende voor een wereldwijd informatie systeem zoals het web, zodat HTML de meer complete karakterset Universal Character Set (UCS) gebruikt die gedefineerd wordt in ISO 10646. In eerdere versies van HTML was ISO 8859-1 de standaard. ISO 10646 definieert een repertoire van duizenden karakters gebruikt door gemeenschappen over de hele wereld. Elke versie van de Unicode Standard is verenigbaar met en gesynchroniseerd aan de corresponderende versie van ISO 10646. UTF-8 is één van de manieren om Unicode correct te encoderen, omdat zij elke codepositie correct opslaat en weergeeft. ISO 8859-1 is minder geschikt, omdat het niet alle codeposities correct opslaat en weergeeft, alhoewel het voor westerse talen weinig problemen oplevert.
Bronnen:
http://www.w3.org/TR/html4/charset.html
http://www.joelonsoftware.com/articles/Unicode.html
http://www.unicode.org/standard/principles.html
http://webrichtlijnen.ove...oductie/karaktercodering/

[ Voor 3% gewijzigd door X-Lars op 13-12-2004 16:56 ]


Acties:
  • 0 Henk 'm!

Anoniem: 97824

ISO-8859-1 is niet de default voor text/html? Volgens mij nog steeds hoor. Net zoals US-ASCII default is voor text/xml. En UTF-8 voor application/xml en consorten. Het zou in ieder geval op die manier geimplementeerd moeten zijn m.u.v. ISO-8859-1 voor HTML wat natuurlijk niet echt gaat werken met het huidige web. (Veel te veel verschillende talen e.d. en totaal anders gecodeerde karakters die bijvoorbeeld wel in WINDOWS-1252 vallen wat zo ongeveer de standaard is.

(Als je ISO-8859-1 gebruikt kun je er zo goed als zeker van zijn dat je WINDOWS-1252 karakters binnenkrijgt door een of ander formuliertje.)

UTF-8 zou gebruikt moeten worden, geen ander.

Acties:
  • 0 Henk 'm!

  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
De header van mijn meeste (X)HTML-documenten:

code:
1
2
3
4
5
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Vergeet de spatie&slash niet in de laatste regel!

Inderdaad dus ISO-8859-1 voor de XML-declaratie en UTF-8 voor de HTML-declaratie.

[ Voor 25% gewijzigd door ZeilDude op 13-12-2004 19:13 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Misschien was mijn probleem niet zo duidelijk. Ik zie dus wel wat veel gebruikt wordt, wat gebruikt zou moeten worden en waarom. Ik vraag me echter af wat die ISO 10646 dan precies is, als het niet de "opvolger" o.i.d. t.o.v. ISO 8859-1 is.

Dus de vraagstelling: wat is ISO 10646 t.o.v. ISO 8859-1 en UTF-8 (gezien vanuit onderstaande quote)?
The ASCII character set is not sufficient for a global information system such as the Web, so HTML uses the much more complete character set called the Universal Character Set (UCS), defined in [ISO10646]. This standard defines a repertoire of thousands of characters used by communities all over the world.
"Information Technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane", ISO/IEC 10646-1:1993. This reference refers to a set of codepoints that may evolve as new characters are assigned to them. This reference therefore includes future amendments as long as they do not change character assignments up to and including the first five amendments to ISO/IEC 10646-1:1993. Also, this reference assumes that the character sets defined by ISO 10646 and Unicode remain character-by-character equivalent. This reference also includes future publications of other parts of 10646 (i.e., other than Part 1) that define characters in planes 1-16.

Acties:
  • 0 Henk 'm!

Anoniem: 97824

code:
1
2
3
4
5
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Wat is dit voor onzin? Hier klopt dus helemaal niks van. Het zal waarschijnlijk off-topic zijn, maar ok.

Je zegt nu dat het XML document gecodeerd is in 'iso-8859-1'. Als het echt XML document is zal het META element genegeerd worden, maar waarschijnlijk gebruik je gewoon het verkeerde MIME type waardoor het HTML META element als HTTP equivalent gezien wordt waaruit volgt dat als je server alleen maar 'text/html' als content-type stuurt zonder additionele parameters je document gecodeerd is als UTF-8.

Tenzij je echt 'application/xml' gebruikt voor het bovenstaande. Dan hoort het 'iso-8859-1' te zijn tenzij je een BOM gebruikt van UTF-8 of... etc.
Inderdaad dus ISO-8859-1 voor de XML-declaratie en UTF-8 voor de HTML-declaratie.
Je hebt het inderdaad compleet niet begrepen. (UTF-8 of een van de andere 6 Unicode coderingsformaten wordt trouwens aangeraden voor XML.)

Acties:
  • 0 Henk 'm!

Anoniem: 97824

Lars, jij refereert naar een specificatie, iets heel anders als het coderingsformaat zelf.
The character set defined in [ISO10646] is character-by-character equivalent to Unicode ([UNICODE]). Both of these standards are updated from time to time with new characters, and the amendments should be consulted at the respective Web sites. In the current specification, "[ISO10646]" is used to refer to the document character set while "[UNICODE]" is reserved for references to the Unicode bidirectional text algorithm.
Dat stukje en dat stukje erboven zegt alleen maar dat HTML Unicode ondersteund het zegt niks over de standaard waarde van de charset parameter van de content-type header als de waarde daarvan text/html is.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
OK, dat verheldert al een heleboel :)

Maar er staat HTML uses UCS. En dat zit me nou eenmaal niet lekker. Maar goed, ik zal me erbij neerleggen...

Heb even wat zitten proberen (graag commentaar):
About Content Negotiation

[...]

Apache 1.2 supports 'server driven' content negotiation, as defined in the HTTP/1.1 specification. It fully supports the Accept, Accept-Language, Accept-Charset and Accept-Encoding request headers.

[...]

Apache Negotiation Algorithm

Apache can use the following algorithm to select the 'best' variant (if any) to return to the browser. This algorithm is not further configurable. It operates as follows:
[..]
2.5 Select variants with the best charset media parameters, as given on the Accept-Charset header line. Charset ISO-8859-1 is acceptable unless explicitly excluded. Variants with a text/* media type but not explicitly associated with a particular charset are assumed to be in ISO-8859-1.
toon volledige bericht
Wat Anne zei dus. Maar ik kan middels de meta-data van het HTML document de default charset niet overriden, want de browser geeft bij encoding nog steeds ISO 8859-1 aan. Dit gaat dus met een HTTP header, want deze heeft (logisch) voorrang. Maar dan komt het zeker heel vaak voor dat men gewoon denkt een charset van UTF-8 (of wat dan ook) te serveren, terwijl dat eigenlijk helemaal niet zo is?

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
In de volgende "hiërarchie" kan 2 wel 1 overriden, maar 3 kan 2 (en 1) niet overriden. Conclusie: het heeft (in deze context) pas zin om 3 te gebruiken als 1 niet geset is (en 3 is gelijk aan 2 of 2 is ook niet geset).
  1. Apache directive AddDefaultCharset
  2. HTTP Content-type header
  3. meta-data
Dit heb ik op mijn webservertje even getest. Heb ik hier een punt?

EDIT: Ja X-Lars, je hebt een punt :+, maar de charset in je meta-data heeft wel degelijk meer nut dan je nu doet veronderstellen:
Voordelen van het gebruik van het meta element
  • Veel webservers zijn standaard neutraal in het specificeren van de karakterset van webpagina’s, waardoor het op de <meta> tag in de pagina aankomt om de karakterset aan te geven.
  • Een pagina die vanaf de harde schijf op de computer in de browser wordt geladen, in plaats vanaf een webserver, mist de HTTP headers. Een meta element kan in dat geval de browser een indicatie geven van de gebruikte karakterset.

[ Voor 51% gewijzigd door X-Lars op 14-12-2004 11:43 ]


Acties:
  • 0 Henk 'm!

Anoniem: 97824

Mwaj, het heeft weinig nut. Het zorgt er bijvoorbeeld ook voor dat je document opnieuw gerenderd wordt. En lokaal, tja, wie slaat er nu nog complete webpagina's op? Daarnaast zou de browser (of jij) een BOM kunnen gebruiken om aan te geven dat het bijvoorbeeld om een UTF-8 document gaat. (Als het goed is kijken browsers daarnaar, het hoeft niet.)

Over die vraag daarvoor, de meeste webservers zijn zo ingesteld: "AddType text/html .html .htm" of iets dergelijks. Ze stellen dus de 'charset' paramter helemaal niet in.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Anoniem: 97824 schreef op dinsdag 14 december 2004 @ 16:38:
[...]

Over die vraag daarvoor, de meeste webservers zijn zo ingesteld: "AddType text/html .html .htm" of iets dergelijks. Ze stellen dus de 'charset' paramter helemaal niet in.
Mijn Apache 2 package had deze wel degelijk default op ISO-8859-1 staan. Apache 1.33 had deze directive niet default. Maar er zijn natuurlijk meer webservers, hier heb ik niet naar gekeken.

Acties:
  • 0 Henk 'm!

Anoniem: 97824

Ah ok, Apache 2 is dus standaard meer compliant. Ik denk echter dat hosts dat zullen wijzigen, zeker Aziatische e.d.
Pagina: 1