Signokodoj

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

Chi tiu teksto esence estas adapto de Anglalingva dokumento (“A tutorial on character code issues”), kiun verkis kaj enretigis Jukka KORPELA. Mia versio naskighis kiel simpla traduko de (antaua versio de) lia dokumento, sed finfine mi tiom rearanghis, resumis kaj adaptis lian prezenton, ke oni ne povas plu paroli pri nura traduko. Tamen, la esencaj instruoj kaj ideoj (kaj ankorau multaj vortumoj) estas ankorau 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 kauzoj 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 chi tie ne necesas paroli pri bitoj. (Bitoko estas ankau nomata bajto.)

Bitokoj estos chi-poste prezentataj precipe per la normala (dekuma) notacio, sed notu, ke ankau 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 chiu signo de signorepertuaro estas ligita al numero, kiu reprezentu tiun signon. Chiu 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 au 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 chiu signo de signokodo havas numeron inter 0 kaj 255, kaj oni prezentas chiun signon per unu bitoko, kiu havas ghuste 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 chiuj 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 cheno a!ä‰ estas prezentata kiel la jena sinsekvo de bitokoj: 0, 97, 0, 33, 0, 228, 32, 48 (po du bitokoj por chiu signo).

La esprimo signaro estas uzata kun diversaj signifoj. Ofte ghi indikas nur signorepertuaron, sed ghi ankau povas havi la signifon signokodo au ech kodprezento. Kiam estighas malklarajhoj, 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 ghi 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 ankau 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: chiu kodonumero estas prezentata per bitoko kun la sama valoro. Rimarku, ke la kodonumeroj de 0 ghis 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 ech 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 au simple Latino 1. ISO 8859-1 ankau difinas signokodon por tiu repertuaro. La repertuaro enhavas la Askian repertuaron kiel subaron (kun la samaj signonumeroj kiel en Askio). La normo ankau difinas kodprezenton, kiu estas same simpla kiel tiu de Askio: chiu 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 Europo, kaj krome ankau 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 nomighas ISO 8859-2 (Latino 2), ISO-8859-3 (Latino 3) k.t.p.

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

Unu problemo pri Latino 3 estas, ke la literoj hh kaj jh 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 hh kaj HH estas du variantoj de la sama litero (minusklo kaj majusklo), sed traktas ilin kiel du tute senrilatajn signojn (same pri jh kaj JH). Ankau aliaj ghenajhoj povas aperi. Efektive oni tute evitu uzi Latinon 3 nuntempe. Por Esperanto Unikodo estas multe pli tauga.

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 ghi 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, ghis-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 lau ISO 8859-1, tio povas doni chian 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 ankau 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 ghi estas okupata de ð (la Islanda litero edo), en la DOS-a kodpagho 850 ghi estas okupata de õ (la litero o kun tildo), kaj en la Makintosha signokodo ghi estas okupata de la sumiga simbolo (simila al la Greka litero sigma).

Ghenerale automata konvertado inter la chi-antaue menciitaj signokodoj ne estas ebla. Ekz. la Makintosha 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”), ankau 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 ghia signorepertuaro kaj de ghia 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 montrighis nesuficha nombro de signoj. Tial Unikodo estis vastigita kaj estas nun tute sufiche ampleksa por chiuj ekzistantaj homaj lingvoj. Ghisdate 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 (au 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 ghia Unikoda valoro sen indiki ian certan kodprezenton.

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

La kodprezento UTF-16

UTF-16 estas Unikoda kodprezento, kiu principe prezentas chiun 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 ghi povas esti neefika por iuj lingvoj. Ekz. UTF-16-a prezento de Anglalingva teksto, au alia teksto, kiu enhavas nur signojn de ISO Latino 1, farighas duoble tiel granda kiel la sama teksto prezentita lau ISO 8859-1. UTF-16 tamen ne plu estas strikte 16-bita kodo. Pere de la tiel nomataj surogataj signoj chiam uzataj en paroj (po 2 bitdeksesoj por chiu signo) oni povas esprimi ankorau chirkau unu milionon da signoj per UTF-16.

La kodprezento UTF-8

En UTF-8 chiu UCS-a signo sub 128 (la Askia repertuaro) estas prezentata “senshanghe”, per unu bitoko. Chiuj aliaj signoj de UCS au Unikodo estas prezentataj, lau sufiche malsimpla metodo, per po du ghis ses bitokoj, el kiuj chiu estas inter 128 kaj 255. Por chiuj jam difinitaj Unikodaj signoj sufichas po tri bitokoj. UTF-8 estas chiam pli kaj pli uzata, ekz. en HTML-paghoj, en retposhto k.s.

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

La kodprezento UTF-7

En UTF-7 chiu Unikoda signo estas prezentata kiel sinsekvo de unu au pli da bitokoj inter 0 kaj 127. Plej multaj Askiaj signoj estas prezentataj senshanghe, chiu 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 retposhta mesagho vi vidas sekvencojn similajn al +AOQ-, +AKE-..., vi vershajne renkontis (miskomprenitan) UTF-7-an tekston.

La nocio signo

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

La Unikoda normo priskribas signojn kiel “la plej malgrandajn skriblingvajn komponantojn kun signifovaloro”, kio estas iom misgvida. Litero apenau 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

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

Estas grave distingi la nocion signo disde la nocio signobildo. Signobildo estas konkreta formo, kiun signo povas havi, kiam ghi estas montrata. Ekz., la signo Z povas esti prezentata kiel grasa Z, au kiel kursiva Z, sed ghi daure 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. Ghi estas uzata ankau kiel minusa signo (kaj krome ankau kiel anstatauajho por ghis-streko kaj haltostreko, char 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 ankau apartaj ghis-streko kaj haltostreko). Por interkongrueco ankau 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 ghi 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 ghi 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.)