Programmeerimise algõpe: HTML ja tähestikud

From Wikiversity


< Programmeerimise algõpe

Tähestikud[edit]

UTF [1][edit]

Teen jälle ühe katse.

  1. Salvestan ylesanded kausta faili "Teahestikud.html".
  2. "Teahestikud.html" faili kirjutan sellise koodi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html lang="et" xml:lang="et" xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
			<title> Tähestikud </title>
		</head>
		<body>
			<h1 align="center">
				Häid jõule!
			</h1>
			<br/>
			<h1 align="center">
				圣诞 快乐!
			</h1>
		</body>
	</html>

Prauser peaks nüüd http://www.hot.ee/vikiylikool/html/ylesanded/Teahestikud.html aadressil avama mu eesti ja hiinakeelse jõulutervituse, aga näitab hoopis seda:


Häid jõule!

圣诞 快乐!

Vaata pilti http://www.hot.ee/vikiylikool/img/Teahestikud.gif!


Püüan viga parandada.

  1. Salvestan ylesanded kausta faili "KorrasTeahestikud.html".
  2. "KorrasTeahestikud.html" faili kirjutan sellise koodi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html lang="et" xml:lang="et" xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
			<title> Korras tähestikud </title>
		</head>
		<body>
			<h1 align="center">
				Häid jõule!
			</h1>
			<br/>
			<h1 align="center">
				圣诞 快乐!
			</h1>
		</body>
	</html>


http://www.hot.ee/vikiylikool/html/ylesanded/KorrasTeahestikud.html ongi palju kenam. Vaata pilti http://www.hot.ee/vikiylikool/img/KorrasTeahestikud.gif!


Mida ma tegin?


Kirjutasin ISO-8859-1 asemele UTF-8 .

Mida need lühendid täpsemalt tähendavad, seda saab lugeda W3schools'i lehelt - http://www.w3schools.com/tags/ref_charactersets.asp ja Wikipedia'st http://en.wikipedia.org/wiki/Character_encodings_in_HTML , aga lihtsustatult (ja aeglustatult) on lugu järgmine:

Igasugune kood on arvuti jaoks lihtsalt kahendarvude ( bit [2] ) jada. Kahendsüsteem kasutab kõigi numbrite tähistamiseks kaht numbrimärki: 0 ja 1, nii nagu kümnendsüsteem kasutab kümmet numbrimärki: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ehk siis kahendarv 10 kirjutatakse kümnendsüsteemi numbriga 2. Prauser või mõni teine rakendus, mille abil arvuti ".html" faili või mõnd muud koodi tõlgendab, üritab temale antud teadmiste põhjal selle koodi alusel midagi teha - näiteks kellegi kodulehte näidata. Kuna erinevad programmid lähtuvad erinevaist eeldustest, siis ka tulemus on erinev. (Ava mõni pilt algul prauseriga ja siis tekstikujundaja - näiteks Notepadiga!) Seegi, mida meie näeme HTML koodina, on tavaline kahendarvu jada. Arvuti loeb kahendarve kaheksakohaliste üksustena ehk baitidena ( byte [3] ). Näiteks 11111111 võib muuhulgas tähistada kümnendarvu 255 ja temale järgnev 00000000 võib tähistada nulli. Ka tähti märgivad kahendarvud, kuid neid võib lugeda erinevalt. Kunagi arvati et iga tähemärgi jaoks jätkub kaheksakohalisest kahendarvust ehk ühest baidist. Tehti hoolega üha uusi ISO ja muid standardeid ja lisati puuduvaid tähti [4]. Selgus aga karm tõde, et kõigi arvutikasutajate emakeelte kirjatähti kokku on rohkem kui 256. Jätame vahele katsetused tõlgendada samu kahendarve eri tähtedena vastavalt kasutaja valitud keelenormile, mida võib veel tänagi leida prauseri [View] nupu [Character encoding] valikust [5]: Windows-1257 for Baltic languages , Hong Kong HKSCS jt. Praegusel hetkel otstarbekaim tõlgendusnorm on UTF-8 või UTF-16, mis võttis üsna korrapäratult ääreni tõusnud ISO normilt 256 esimest tähte tähistavat kahendarvu ja lisab üha suuremaid arvu vastavalt kasvavale vajadusele. On selge, et ka kahest baidist ehk kuueteistkohalisest kahendarvust ei piisa. UTF-8 eelis UTF-16 ees on väiksem failimaht, kuna UTF-16 käsitleb ka 256 esimest tähte kahebaidiste (16 kohaliste) üksustena, aga UTF-8 normi igas kaheksakohalises kahendarvus on märge, mis ütleb, kas see oligi kogu tähe kood või on tarvis juurde lugeda ka järgmine bait [6] jne. Seega hoiab UTF-8 kokku ligi poole kõige enam tarvitatavate kirjamärkide mahu pealt, sest programmeerimiskeelte endi süntaks põhineb enamasti ladina tähestikul.

Peale selle UTF-8 saab "õigesti" aru ka varasema ISO ja ASCII standardi koodist.


Lõpetan selle pop-teaduse praeguseks ja lähen tagasi koodinäite juurde.


Mida ma tegin? - Kirjutasin ISO-8859-1 asemele UTF-8 .

Lihtsalt teavitasin prauserit, kuidas järgnevat koodi õieti lugeda, sest faili sisu ei vastanud märgitud standardile. ISO-8859-1 ei saa kuidagi kirjeldada hiina kirjamärke [7] ja tegelikult olen ka eesti ä, õ salvestanud kahebaidistena Unicode normi kohaselt [8] (s.o

  1. Vajutasin salvestamise eel Notepadi nuppu [File].
  2. Vajutasin linki "Save As ...".
  3. Valisin avanenud aknakese Encodingu loendist UTF-8.
  4. Vajutasin salvestamiseks nuppu [Save].

) .

  • Esialgu jätame meelde, et peame prauserile teatama sama tõlgendusnormi, mille kohaselt faili salvestasime [9] [10].
	...
		<head>
			<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
			...
		</head>
		...


Tähekoodid [11] [12] [13] [14][edit]

Kuid ilmnenud takistusele on ka teine lahendus.

  1. Salvestan ylesanded kausta faili "TeaheKoodid.html".
    1. Vajutasin salvestamise eel Notepadi nuppu [File].
    2. Vajutasin linki "Save As ...".
    3. Valisin avanenud aknakese Encodingu loendist ANSI.
    4. Vajutasin salvestamiseks nuppu [Save].
  2. "TeaheKoodid.html" faili kirjutan sellise koodi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html lang="et" xml:lang="et" xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
			<title> Tähekoodid </title>
		</head>
		<body>
			<h1 align="center">
				&#22307;&#35806; &#24555;&#20048;!
			</h1>
		</body>
	</html>


Ka see hiina keel http://www.hot.ee/vikiylikool/html/ylesanded/TeaheKoodid.html on täitsa kena. Vaata pilti http://www.hot.ee/vikiylikool/img/TeaheKoodid.gif!


Mida ma seekord tegin?


Kirjutasin 圣诞 快乐 asemele &#22307;&#35806; &#24555;&#20048; .

Mida need numbrid täpsemalt tähendavad, seda saab lugeda Wikipedia'st - http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML . Sel lehel on tabel:

Name Character Unicode code point (decimal) Standard DTDTemplate:Ref Old ISO subsetTemplate:Ref DescriptionTemplate:Ref
quot " U+0022 (34) HTML 2.0 HTMLspecial ISOnum quotation mark (= APL quote)
amp & U+0026 (38) HTML 2.0 HTMLspecial ISOnum ampersand

Tabel aitab meid teise (ehk Character ) veeru märke teisel kujul esitada.

  1. Võime võtta esimesest (ehk Name ) veerust lühendi ( näiteks pound ), lisada ette & ja järgi semikooloni ; ning saamegi &pound; , mis ilmutab end brauseris £ kujul.
  2. Võime võtta kolmandast (ehk Unicode code point (decimal) ) veerust sulgudes oleva kümnendarvu ( näiteks 167 ), lisada ette &# ja järgi semikooloni ; ning saamegi &#167; , mis ilmutab end brauseris § kujul.
  3. Võime võtta kolmandast (ehk Unicode code point (decimal) ) veerust U+ järelt kuueteistkümnendarvu [15] ( näiteks 00A9 ), lisada ette &#x ja järgi semikooloni ; ning saamegi &#x00A9; , mis ilmutab end brauseris © kujul.
  • Kõik see lubab meid kirjutada mistahes keeles ISO-8859-1 normist väljumata.


Ülesanne[edit]

      • Paranda alati vead (, kui neid on), et failid valideeruksid [16] ! Kasuta sellist standardit:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html lang="et" xml:lang="et" xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
			<title> Tähekoodid </title>
		</head>
		<body>
			Oma kood kirjuta siia.
		</body>
	</html>


Viited[edit]