Mis on märgikodeering
Kodeering on kokkulepe: „arv 65 tähendab tähte A“. Kui kirjutad teksti, salvestab programm need arvud; kui keegi teine selle avab, tõlgib tema programm need sama kokkuleppe abil uuesti tähtedeks. Kui kaks ei kasuta sama tabelit, tuleb tekst valesti välja.
Tuleb eristada kahte ideed. Üks on märgistik, nimekiri sellest, millised arvud vastavad millistele sümbolitele. Teine on see, kuidas need arvud baitidena salvestatakse. ASCII-s langevad need kaks triviaalselt kokku; Unicode'is mitte ja siin tuleb mängu UTF-8.
ASCII: 128 märki 7 bitiga
ASCII (lühend sõnadest American Standard Code for Information Interchange) standardiseeriti 1960. aastatel. See kasutab 7 bitti, st 2 astmes 7 = 128 koodi, 0-st 127-ni. Neist 33 on juhtmärgid (0 kuni 31 ja 127) ja 95 on trükitavad (32 kuni 126, tühik kaasa arvatud).
See ei sisalda täpitähti, ei ä-d ega euromärki: see on loodud inglise keele jaoks. See seletab, miks hiljem läks vaja teisi tabeleid.
| Juhtmärk | Kümnend | Kuueteistkümnend | Kahend (7 bitti) | Milleks see on |
|---|---|---|---|---|
| Null (NUL) | 0 | 00 | 0000000 | Märgib stringi lõppu mitmes keeles |
| Horisontaalne tabulaator (TAB) | 9 | 09 | 0001001 | Hüppab järgmise tabulaatorini |
| Reavahetus (LF) | 10 | 0A | 0001010 | Läheb järgmisele reale |
| Kelgu tagastus (CR) | 13 | 0D | 0001101 | Naaseb rea algusesse |
| Paomärk (ESC) | 27 | 1B | 0011011 | Alustab juhtjadasid |
| Tühik | 32 | 20 | 0100000 | Esimene trükitav märk |
| Kustuta (DEL) | 127 | 7F | 1111111 | Kustutab märgi |
Seosed, mida tasub meeles pidada
Tabel ei ole juhuslikus järjekorras. Mõne regulaarsusega saad koode peast lugeda.
- Numbrid „0“ kuni „9“ hõivavad 48 kuni 57 (30 kuni 39 kuueteistkümnendsüsteemis). Numbri väärtus on selle kood miinus 48: „7“ on 55 ja 55 − 48 = 7.
- Suurtähed ulatuvad 65-st („A“) 90-ni („Z“) ja väiketähed 97-st („a“) 122-ni („z“).
- Vahe suurtähe ja selle väiketähe vahel on alati 32: „A“ = 65 ja „a“ = 97; „C“ = 67 ja „c“ = 99. Kahendsüsteemis muutub vaid üks bitt: 01000001 „A“ jaoks ja 01100001 „a“ jaoks.
- Et teada, mitmendal kohal tähestikus suurtäht on, lahuta 64: „C“ on 67 ja 67 − 64 = 3, kolmas täht.
- Kuna kõigil suurtähtedel (65 kuni 90) on väiksemad koodid kui väiketähtedel (97 kuni 122), paneb „koodi järgi“ tähestikuline järjestus „Zebra“ enne „apple“. Paljud programmid vajavad õigeks sorteerimiseks eraldi võrdlusvalikut.
Reavahetus: LF, CR ja CRLF
Reavahetus tundub lihtne, aga seda kirjutatakse süsteemiti erinevalt. Unix, Linux ja macOS kasutavad ühte märki, LF (10). Windows kasutab kaht järjest, CR ja LF (13 ja 10), tuntud kui CRLF. Vanad teletaibid vajasid kahte erinevat käsku: tagasi rea algusesse viimine ja paberi ühe rea võrra edasi nihutamine.
See erinevus on põhjus, miks failid paistavad lihtsas redaktoris ühe reana või iga rea lõpus on kummaline sümbol. Kui otsid, mis kood kummalgi on, kirjuta ASCII tabeli otsingusse LF või CR.
„Laiendatud ASCII“ ei ole standard
Kuna bait on 8 bitti ja ASCII kasutab vaid 7, jäi vabaks 128 koodi (128 kuni 255) ja iga tootja ja piirkond täitis need omamoodi. Seda tuntakse „laiendatud ASCII“ nime all, aga ühte tabelit ei ole: neid on palju, nimega koodilehed. Kaks tuntumat on Latin-1 (ISO-8859-1), kus é on kood 233, ja Windows-1252, sarnane, aga erinevustega koodides 128 kuni 159 (seal on näiteks euro).
Probleem on selles, et kood 233 tähendab ühes tabelis „é“ ja teises midagi muud. Ühe tabeliga kirjutatud ja teisega loetud tekst näitas rämpsu. Unicode sündis selle segaduse lõpetamiseks.
Unicode ja UTF-8
Unicode määrab igale märgile peaaegu kõigis maailma kirjasüsteemides, lisaks sümbolitele ja emojidele, ainulaadse arvu, mida nimetatakse koodipunktiks. Tänapäeval on sellel üle 150 000 märgi. Kirjutatakse prefiksiga U+ ja kuueteistkümnendsüsteemis: „A“ on U+0041, „ä“ on U+00E4, euro on U+20AC ja naerunäo emoji on U+1F600. Esimesed 128 koodipunkti on täpselt ASCII omad.
UTF-8 on kõige kasutatavam viis nende arvude baitidena salvestamiseks ja kasutab märgist olenevalt 1 kuni 4. 128 ASCII märki võtavad ühe baidi, mis on sama mis alati, seega on ASCII tekst ka kehtiv UTF-8 tekst. Ülejäänud võtavad rohkem baite.
| Märk | Koodipunkt | Baite UTF-8-s | Baidid (kuueteistkümnendsüsteemis) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ä | U+00E4 | 2 | C3 A4 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Miks ilmub „ä“ asemel „ä“
See on kõige sagedasem viga ja sellel on täpne seletus. Täht ä on UTF-8-s kaks baiti: C3 ja A4. Kui programm usub, et tekst on Latin-1-s, loeb ta iga baiti märgina: C3 on „Ó ja A4 on „¤“. Tulemus: „ä“. Sama juhtub „é“-ga, mis näeb välja nagu „é“, ja sõnaga „päev“, mis ilmub kujul „päev“.
Lahendus on peaaegu alati öelda programmile, et avaks faili UTF-8-na (tekstiredaktoris või arvutustabeli impordi seadetes). Kui juhtub vastupidi, Latin-1 tekst loetakse UTF-8-na, ilmuvad tavaliselt rombid küsimärgiga, sest need üksikud baidid ei moodusta kehtivaid UTF-8 jadasid.
Kuidas kasutada ASCII tabelit ja teisendajat
Tööriist „ASCII tabel“ näitab 128 märki koos nende koodiga kümnend-, kuueteistkümnend-, kaheksand- ja kahendsüsteemis ning juhtmärkide nimega.
- Kirjuta otsingusse märk, kood või juhtmärgi nimi (näiteks A, 65, 41 või LF), et leida selle rida.
- Kasuta filtrinuppe (Juhtmärgid, Numbrid, Suurtähed, Väiketähed, Sümbolid), et näha ainult ühte rühma.
- Teisendamiseks kirjuta tekst väljale „Tekst“ ja vali vorming (kümnend-, kuueteistkümnend-, kaheksand- või kahendsüsteem): all ilmuvad koodid. „Tere“ annab kümnendsüsteemis 84 101 114 101 ja kuueteistkümnendsüsteemis 54 65 72 65.
- Võid teha ka vastupidi: kleebi tühikute või komadega eraldatud koodid väljale „Koodid“ ja tekst koostatakse. Kuueteistkümnendsüsteemis aktsepteeritakse prefikseid nagu 0x41.
Kui tekstis on märke, mis ei ole ASCII, nagu ä, annab tööriist sellest märku ja näitab nende Unicode'i koodi. UTF-8 tegelike baitide nägemiseks kasuta „Tekst kahendkoodiks“: ä annab 11000011 10100100, kaks 8-bitist baiti. Piirangud: tabel näitab ainult standardset ASCII-d, mitte laiendatud, ning kõik arvutatakse sinu brauseris, teksti ühtegi serverisse saatmata.
Korduma kippuvad küsimused
Kui palju märke on ASCII-s?
128, koodidega 0 kuni 127 ja 7 bitti igaüks. Neist 33 on juhtmärgid ja 95 trükitavad, tühik kaasa arvatud.
Mis on tähe A ja a ASCII kood?
„A“ on 65 (41 kuueteistkümnendsüsteemis, 01000001 kahendsüsteemis) ja „a“ on 97 (61 kuueteistkümnendsüsteemis, 01100001 kahendsüsteemis). Need erinevad alati 32 võrra.
Mis vahe on ASCII-l ja Unicode'il?
ASCII-l on 128 märki, mis on mõeldud inglise keele jaoks. Unicode'il on üle 150 000, peaaegu kõigist keeltest ja emojid, ja selle esimesed 128 on samad mis ASCII omad.
Mis on UTF-8?
See on kõige kasutatavam viis Unicode'i teksti baitidena salvestada. Kasutab märgi kohta 1 kuni 4 baiti: ASCII märgid võtavad ühe, ä kaks ja emoji neli.
Miks minu tekstis on „ä“ või „é“?
Sest UTF-8-s salvestatud teksti loetakse Latin-1-na. Ava fail, näidates kodeeringuks UTF-8, ja see parandab ära.