Signokodoj

Signorepertuaro, signokodo, kodprezento... ???!

Cxi tiu teksto esence estas adapto de Anglalingva dokumento (“A tutorial on character code issues”), kiun verkis kaj enretigis Jukka KORPELA. Mia versio naskigxis kiel simpla traduko de (antauxa versio de) lia dokumento, sed finfine mi tiom rearangxis, resumis kaj adaptis lian prezenton, ke oni ne povas plu paroli pri nura traduko. Tamen, la esencaj instruoj kaj ideoj (kaj ankoraux multaj vortumoj) estas ankoraux de Jukka KORPELA, kaj li havu plenan rekonon por sia laboro.

Kelkaj difinoj

Iuj el la sekvaj difinoj ne estas universale akceptitaj. Efektive unu el la plej grandaj kauxzoj de konfuzo pri signokodaj aferoj estas varia kaj malorda terminologio.

“bitoko”

= grupo de ok bitoj. En komputiloj datumoj estas prezentataj interne kiel bitokoj. Bitoko estas malgranda datuma unuo kun numera valoro inter 0 kaj 255. Bitoko konsistas el ok bitoj (pro tio la nomo bitoko), sed cxi tie ne necesas paroli pri bitoj. (Bitoko estas ankaux nomata bajto.)

Bitokoj estos cxi-poste prezentataj precipe per la normala (dekuma) notacio, sed notu, ke ankaux aliaj prezentomanieroj uzeblas, precipe notacioj okuma kaj deksesuma.

“signorepertuaro”

= aro de apartaj signoj. Signorepertuaro tute ne supozas ian certan komputilan reprezentadon. Rimarku, ke signorepertuaro povas enhavi signojn, kiuj povas aspekti same, sed kiuj estas rigardataj kiel logike apartaj, kiel ekz. Latina majuskla A, Cirila majuskla A, kaj Greka majuskla alfa.

“signokodo”

= sistemo, en kiu cxiu signo de signorepertuaro estas ligita al numero, kiu reprezentu tiun signon. Cxiu signo ricevas unikan numeran kodon (kodan pozicion, kodan valoron). La numeroj de signokodo ne necese konsistas el intersekvaj numeroj. Fakte plej multaj signokodoj enhavas “truojn”, kiel ekz. kodpoziciojn rezervitajn por stiraj funkcioj aux por eventuala estonta uzo.

“kodprezento”

= metodo por prezenti signojn en cifereca formo. Kodprezento difinas, kiuj sinsekvoj de bitokoj reprezentu kiujn numerojn de signokodo. En la plej simpla okazo cxiu signo de signokodo havas numeron inter 0 kaj 255, kaj oni prezentas cxiun signon per unu bitoko, kiu havas gxuste tiun saman valoron: signo numero 60 estas reprezentata de bitoko kun la valoro 60, k.t.p. Kompreneble tiel simplega kodprezento eblas nur por signorepertuaroj kun maksimume 256 signoj. Por pli grandaj repertuaroj pli malsimplaj kodprezentoj necesas.

Alivorte

  • Signorepertuaro estas kolekto de signoj, kiel a, !, kaj ä.
  • Signokodo difinas numerajn kodojn por cxiuj signoj de repertuaro. Ekz., en la signokodo ISO 10646 la numeraj kodoj por a, !, ä, kaj (promila signo, “o/oo”) estas 97, 33, 228, kaj 8240 respektive.
  • Kodprezento difinas, kiamaniere sinsekvoj de numeraj kodoj estas prezentataj kiel sinsekvoj de bitokoj. En unu ebla kodprezento de la signokodo ISO 10646 la cxeno a!ä‰ estas prezentata kiel la jena sinsekvo de bitokoj: 0, 97, 0, 33, 0, 228, 32, 48 (po du bitokoj por cxiu signo).

La esprimo signaro estas uzata kun diversaj signifoj. Ofte gxi indikas nur signorepertuaron, sed gxi ankaux povas havi la signifon signokodo aux ecx kodprezento. Kiam estigxas malklarajxoj, estas bone provi difini, kian precizan sencon oni celas per la vorto signaro.

Askio

Askio (ASCII) estas malnova signa repertuaro, kodo, kaj kodprezento. Kiel internacia normo gxi estas nomata ISO 646.

La Askia signokodo donas numerojn al preseblaj signoj komencante per 32 (por spaceto) kaj finante per 126 (por la tildo-signo ~). Krome Askio enhavas ankaux aron de stirsignoj (nepreseblaj signoj), ekz. liniavanco (LF).

La preseblaj signoj de Askio, estas prezentataj en la jena Tabelo de Askio.

La Askia kodprezento estas plejeble simpla: cxiu kodonumero estas prezentata per bitoko kun la sama valoro. Rimarku, ke la kodonumeroj de 0 gxis 31, kaj 127, ne respondas al preseblaj signoj. Ili estas rezervitaj por stirado.

La numeroj/bitokoj 128 - 255 ne estas uzataj en Askio.

Foje oni parolas pri okbita Askio. Tio estas misnomo por diversaj signokodoj, kiuj estas vastigoj de Askio. Iliaj signorepertuaroj enhavas Askion kiel subaron, sed la kodonumeroj estas inter 0 kaj 255. Ne malofte oni ecx uzas la simplan nomon Askio por tiaj signokodoj. Precipe Latino 1 estas ofte misnomata Askio. Sciu, ke vera Askio tute ne enhavas ion kun numero super 127.

ISO Latino 1

La normo ISO 8859-1 difinas signorepertuaron kun la nomo Latina alfabeto n-ro 1, kutime ISO Latino 1 aux simple Latino 1. ISO 8859-1 ankaux difinas signokodon por tiu repertuaro. La repertuaro enhavas la Askian repertuaron kiel subaron (kun la samaj signonumeroj kiel en Askio). La normo ankaux difinas kodprezenton, kiu estas same simpla kiel tiu de Askio: cxiu kodonumero estas prezentata simple kiel unu bitoko.

Aldone al la Askiaj signoj, ISO Latino 1 enhavas diversajn supersignajn kaj aliajn literojn bezonatajn por skribi lingvojn de okcidenta Euxropo, kaj krome ankaux kelkajn aliajn specialajn signojn. Tiuj aldonaj literoj kaj signoj okupas la kodajn poziciojn 160 - 255.

Jen tabelo de Latino 1 (krom tiu parto, kiu identas kun Askio).

ISO Latino 3

Apud ISO Latino 1 oni starigis aliajn signorepertuarojn kaj kodojn, kiuj estas variantoj de Latino 1, sed kiuj estas adaptitaj al aliaj lingvogrupoj. Ili nomigxas ISO 8859-2 (Latino 2), ISO-8859-3 (Latino 3) k.t.p.

Por Esperantistoj estas plej interesa la varianto Latino 3. Gxi enhavas niajn supersignajn literojn, sed ankaux literojn de ekz. la Malta lingvo.

Unu problemo pri Latino 3 estas, ke la literoj hx kaj jx okupas kodpoziciojn, kiuj en Latino 1 estas okupataj de signoj, kiuj tute ne estas literoj. Tial, se oni provas uzi Latinon 3 en programo, kiu estas farita por Latino 1 (plej multaj programoj!), tiuj du literoj povas konduti strange. La programoj ekz. plej ofte tute ne rekonas, ke hx kaj HX estas du variantoj de la sama litero (minusklo kaj majusklo), sed traktas ilin kiel du tute senrilatajn signojn (same pri jx kaj JX). Ankaux aliaj gxenajxoj povas aperi. Efektive oni tute evitu uzi Latinon 3 nuntempe. Por Esperanto Unikodo estas multe pli tauxga.

Jen tabelo de Latino 3 (krom tiu parto, kiu identas kun Askio).

La Vindoza signokodo

La Vindoza signokodo Windows-1252 (“WinLatin1”, CP-1252) estas tre simila al ISO 8859-1 (Latino 1), sed gxi ne estas identa al tiu.

En ISO 8859-1 la kodaj pozicioj 128 - 159 estas rezervitaj por stirado. Ili ne respondas al grafikaj signoj. En Windows-1252 iuj el tiuj pozicioj tamen reprezentas preseblajn signojn, kiel ekz. haltostreko, gxis-streko, kaj fabriksimbolo. La signorepertuaro estas do pli vasta ol tiu de ISO Latino 1.

Se oni uzas bitokojn inter 128 kaj 159 en programo, kiu supozas, ke la datumoj estas laux ISO 8859-1, tio povas doni cxian ajn rezulton. En la plej malbona okazo ili estas interpretataj kiel stirsignoj kun ofte tre stranga rezulto.

Jen tabelo de tiuj signoj, kiuj estas apartaj por la Vindoza signokodo.

Aliaj vastigoj de Askio

Ekzistas pluraj signokodoj, kiuj estas vastigoj de Askio. ISO 8859-1 mem estas nur membro de tuta signokoda familio ISO 8859. Sed ekzistas ankaux aliaj vastigoj de Askio. Multaj el ili estas tre malsimilaj al ISO 8859-1. Ekz. la koda pozicio 228 estas en ISO 8859-1 okupata de ã (la litero a kun tremao), en la signokodo Roman-8 de HP gxi estas okupata de ð (la Islanda litero edo), en la DOS-a kodpagxo 850 gxi estas okupata de õ (la litero o kun tildo), kaj en la Makintosxa signokodo gxi estas okupata de la sumiga simbolo (simila al la Greka litero sigma).

Gxenerale auxtomata konvertado inter la cxi-antauxe menciitaj signokodoj ne estas ebla. Ekz. la Makintosxa signorepertuaro enhavas la Grekan literon pi, kiu tute ne ekzistas en Latino 1.

ISO 10646 (UCS) kaj Unikodo «

ISO 10646 = UCS = la Universala Signaro (“Universal Character Set”), ankaux nomata la “Universala Alfabeto”, estas ekstreme vasta signa repertuaro kaj kodo, kiu ebligas pli ol du miliardojn da kodpozicioj! UCS estas vastigo de ISO Latino 1, de gxia signorepertuaro kaj de gxia signokodo en la sama senco kiel ISO Latino 1 estas vastigo de Askio.

Unikodo estas normo, kiun ellaboras la Unikoda Konsorcio en strikta kunlaboro kun ISO por teni Unikodon konforma kun UCS. Unikodo estas signorepertuaro kaj signokodo baze identa al USC, sed Unikodo difinas kelkajn pliajn informojn pri la signoj. Komence Unikodo estis strikte 16-bita kodo, kaj ampleksis nur la unuan “ebenon” de UCS (la “Baza Multlingva Ebeno” = la unuaj 65535 kodpozicioj de UCS), sed tio rapide montrigxis nesuficxa nombro de signoj. Tial Unikodo estis vastigita kaj estas nun tute suficxe ampleksa por cxiuj ekzistantaj homaj lingvoj. Gxisdate por 96382 el la kodpozicioj de Unikodo oni efektive difinis signojn (en Unikodo versio 4.0.0 publikigita en Aprilo 2003).

Ofte oni referencas al Unikodaj signoj per notacio en la formo U+nnnn (aux simile), kie nnnn estas kvar deksesumaj ciferoj. Ekz. U+0020 indikas la spacetan signon (kun kodvaloro 20 deksesume, 32 dekume). Rimarku, ke tiaj notacioj identigas signon per gxia Unikoda valoro sen indiki ian certan kodprezenton.

Jen detala tabelo de tiu parto de Unikodo, en kiu trovigxas la Esperantaj supersignaj literoj.

La kodprezento UTF-16

UTF-16 estas Unikoda kodprezento, kiu principe prezentas cxiun signon per unu bitdekseso kun la sama valoro kiel la numero de la signo. En la praktiko temas tamen plej ofte pri du sinsekvaj bitokoj (8 + 8 = 16). Tio estas tre evidenta kaj simpla kodprezento. Tamen gxi povas esti neefika por iuj lingvoj. Ekz. UTF-16-a prezento de Anglalingva teksto, aux alia teksto, kiu enhavas nur signojn de ISO Latino 1, farigxas duoble tiel granda kiel la sama teksto prezentita laux ISO 8859-1. UTF-16 tamen ne plu estas strikte 16-bita kodo. Pere de la tiel nomataj surogataj signoj cxiam uzataj en paroj (po 2 bitdeksesoj por cxiu signo) oni povas esprimi ankoraux cxirkaux unu milionon da signoj per UTF-16.

La kodprezento UTF-8

En UTF-8 cxiu UCS-a signo sub 128 (la Askia repertuaro) estas prezentata “sensxangxe”, per unu bitoko. Cxiuj aliaj signoj de UCS aux Unikodo estas prezentataj, laux suficxe malsimpla metodo, per po du gxis ses bitokoj, el kiuj cxiu estas inter 128 kaj 255. Por cxiuj jam difinitaj Unikodaj signoj suficxas po tri bitokoj. UTF-8 estas cxiam pli kaj pli uzata, ekz. en HTML-pagxoj, en retposxto k.s.

Se en ekz. la fontokodo de HTML-pagxo vi vidas strangajn sekvencojn similajn al Ĥ, ĥ, š, ﮡ, ﮲..., vi versxajne renkontis UTF-8-an tekston (kiun la programo tamen ne sukcesis gxuste interpreti).

La kodprezento UTF-7

En UTF-7 cxiu Unikoda signo estas prezentata kiel sinsekvo de unu aux pli da bitokoj inter 0 kaj 127. Plej multaj Askiaj signoj estas prezentataj sensxangxe, cxiu kiel po unu bitoko, sed iuj bitokaj valoroj estas rezervitaj kiel “eskapsignoj”, kiuj montras, ke tiu bitoko kune kun certa nombro de sekvaj bitokoj formas plurbitokan prezenton de iu signo. UTF-7 estas malpli oportuna ol UTF-8, kaj estas multe malpli ofte uzata.

Se en ekz. la fontokodo de retposxta mesagxo vi vidas sekvencojn similajn al +AOQ-, +AKE-..., vi versxajne renkontis (miskomprenitan) UTF-7-an tekston.

La nocio signo

La nocio signo estas baza por la aferoj cxi tie diskutataj, sed gxin difini ekzakte estas malfacile.

La Unikoda normo priskribas signojn kiel “la plej malgrandajn skriblingvajn komponantojn kun signifovaloro”, kio estas iom misgvida. Litero apenaux estas portanto de signifo per si mem. Plie, signo kiel ú (la litero u kun dekstrakorna supersigno) povas estas rigardata kiel du signoj: litero kaj supersigno. Kaj fakte en Unikodo la difino de signo estas la jena:

abstrakta signo: inform-unuo uzata por organizado, regado, kaj reprezentado de tekstaj datumoj

(Laux la Unikoda terminologio abstrakta signo estas signo kiel elemento de signorepertuaro, dum signo indikas “koditan signo-reprezenton”, kio efektive estas kodvaloro. Konfuze, cxu ne?)

Estas grave distingi la nocion signo disde la nocio signobildo. Signobildo estas konkreta formo, kiun signo povas havi, kiam gxi estas montrata. Ekz., la signo Z povas esti prezentata kiel grasa Z, aux kiel kursiva Z, sed gxi dauxre estas la sama signo. (Aliflanke, minuskla z estas difinita kiel aparta signo - kiu siavice povas havi diversajn signobildajn prezentojn.)

Repertuaro de signobildoj konsistigas tiparon.

Signorepertuaro difinas la identecon de signoj. Ekz., la Askia repertuaro enhavas signon nomatan dividostreko. Gxi estas uzata ankaux kiel minusa signo (kaj krome ankaux kiel anstatauxajxo por gxis-streko kaj haltostreko, cxar tiaj signoj mankas en Askio). Do, tiu Askia signo estas komuna plurcela signo, kaj oni povas diri, ke en Askio dividostreko kaj minuso estas identaj. Sed en Unikodo ekzistas apartaj signoj nomataj dividostreko kaj minus-signo (kaj ankaux apartaj gxis-streko kaj haltostreko). Por interkongrueco ankaux la malnova Askia signo estas konservata en Unikodo (en sia malnova koda pozicio, kun la nomo dividostreko-minuso).

Simile Unikodo difinas signojn por la om-simbolo, la mikro-prefikso, k.t.p., kiel apartajn disde tiuj Grekaj literoj, de kiuj ili originas (majuskla omega, minuskla mu, k.t.p.). Tio estas logika distingo, kaj gxi ne necesigas, ke diversaj signobildoj estu uzataj. La distingo estas grava ekz. kiam tekstaj datumoj en cifereca formo estas traktataj de programo (kiu “vidas” la kodajn valorojn, pere de ia kodprezento, kaj tute ne la signobildojn). Rimarku, ke Unikodo ne distingas inter la minuskla Greka litero pi, kaj la matematika simbolo pi... Aliflanke gxi ja distingas inter majuskla Greka pi, kaj la matematika simbolo por n-uma produto. (Se vi pensas, ke tio ne sonas tute logike, vi ne estas sola.)