Kas yra simbolių koduotė
Koduotė yra susitarimas: „skaičius 65 reiškia raidę A“. Kai rašote tekstą, programa saugo tuos skaičius; kai kitas žmogus jį atidaro, jo programa vėl paverčia juos raidėmis pagal tą patį susitarimą. Jei abu nenaudoja tos pačios lentelės, tekstas išeina blogai.
Reikia atskirti dvi idėjas. Viena – simbolių rinkinys, tai yra sąrašas, kurie skaičiai atitinka kuriuos simbolius. Kita – kaip tie skaičiai saugomi baitais. ASCII atveju abu sutampa trivialiai; Unicode – ne, ir čia atsiranda UTF-8.
ASCII: 128 simboliai po 7 bitus
ASCII (angl. American Standard Code for Information Interchange) buvo standartizuotas septintajame dešimtmetyje. Jis naudoja 7 bitus, tai yra 2 pakelta 7 = 128 kodų, nuo 0 iki 127. Iš jų 33 yra valdymo simboliai (nuo 0 iki 31 ir 127), o 95 – spausdinami (nuo 32 iki 126, įskaitant tarpą).
Jame nėra raidžių su diakritikais (pavyzdžiui, ą ar š) ir euro ženklo: jis sukurtas anglų kalbai. Tai paaiškina, kodėl vėliau prireikė kitų lentelių.
| Valdymo simbolis | Dešimtainis | Šešioliktainis | Dvejetainis (7 bitai) | Kam skirtas |
|---|---|---|---|---|
| Nulis (NUL) | 0 | 00 | 0000000 | Keliose kalbose žymi eilutės pabaigą |
| Horizontalus tabuliavimas (TAB) | 9 | 09 | 0001001 | Peršoka į kitą tabuliavimo vietą |
| Eilutės pastūmimas (LF) | 10 | 0A | 0001010 | Nusileidžia į kitą eilutę |
| Grįžimas į eilutės pradžią (CR) | 13 | 0D | 0001101 | Grįžta į eilutės pradžią |
| Pabėgimas (ESC) | 27 | 1B | 0011011 | Pradeda valdymo sekas |
| Tarpas | 32 | 20 | 0100000 | Pirmasis spausdinamas simbolis |
| Ištrynimas (DEL) | 127 | 7F | 1111111 | Ištrina simbolį |
Ryšiai, kuriuos verta atsiminti
Lentelė nesudaryta atsitiktinai. Su keliais dėsningumais kodus galima skaityti mintinai.
- Skaitmenys nuo „0“ iki „9“ užima kodus nuo 48 iki 57 (30–39 šešioliktainėje sistemoje). Skaitmens vertė yra jo kodas minus 48: „7“ yra 55, o 55 − 48 = 7.
- Didžiosios raidės eina nuo 65 („A“) iki 90 („Z“), o mažosios – nuo 97 („a“) iki 122 („z“).
- Skirtumas tarp didžiosios raidės ir jos mažosios visada yra 32: „A“ = 65 ir „a“ = 97; „C“ = 67 ir „c“ = 99. Dvejetainėje sistemoje keičiasi tik vienas bitas: 01000001 raidei „A“ ir 01100001 raidei „a“.
- Norėdami sužinoti, kurią vietą abėcėlėje užima didžioji raidė, atimkite 64: „C“ yra 67, o 67 − 64 = 3, trečioji raidė.
- Kadangi visų didžiųjų raidžių kodai (65–90) yra mažesni nei mažųjų (97–122), abėcėlinis rikiavimas „pagal kodą“ „Zebras“ pastato prieš „abrikosas“. Daugeliui programų reikia atskiros palyginimo parinkties, kad rūšiuotų teisingai.
Eilutės pabaiga: LF, CR ir CRLF
Eilutės perkėlimas atrodo paprastas dalykas, bet skirtingose sistemose rašomas skirtingai. „Unix“, „Linux“ ir „macOS“ naudoja vieną simbolį LF (10). „Windows“ naudoja du iš eilės, CR ir LF (13 ir 10), vadinamus CRLF. Senieji teletaipai reikalavo dviejų skirtingų komandų: grąžinti karietą į pradžią ir pastumti popierių per eilutę.
Šis skirtumas yra priežastis, kodėl failai paprastame redaktoriuje atrodo vienoje eilutėje arba kiekvienos eilutės gale yra keistas simbolis. Jei ieškote, kokį kodą turi kiekvienas, ASCII lentelės paieškoje įrašykite LF arba CR.
„Išplėstinis ASCII“ nėra standartas
Kadangi baitas turi 8 bitus, o ASCII naudoja tik 7, liko 128 laisvi kodai (nuo 128 iki 255), ir kiekvienas gamintojas bei regionas juos užpildė savaip. Tai vadinama „išplėstiniu ASCII“, bet vienos lentelės nėra: yra daug, vadinamų koduočių puslapiais. Dvi žinomiausios yra Latin-1 (ISO-8859-1), kur é yra kodas 233, ir Windows-1252, panaši, bet su skirtumais kodų 128–159 srityje (ten yra, pavyzdžiui, euras).
Problema ta, kad kodas 233 vienoje lentelėje reiškia „é“, o kitoje – ką nors kita. Tekstas, parašytas su viena lentele ir perskaitytas su kita, rodė nesąmones. Unicode atsirado šiai netvarkai užbaigti.
Unicode ir UTF-8
Unicode kiekvienam beveik visų pasaulio rašto sistemų simboliui, taip pat simboliams ir jaustukams, priskiria unikalų skaičių, vadinamą kodo tašku. Dabar jame yra daugiau nei 150 000 simbolių. Jis rašomas su priešdėliu U+ ir šešioliktainėje sistemoje: „A“ yra U+0041, „ž“ yra U+017E, euras yra U+20AC, o besišypsančio veido jaustukas yra U+1F600. Pirmieji 128 kodo taškai yra lygiai tokie patys kaip ASCII.
UTF-8 yra dažniausiai naudojamas būdas tuos skaičius saugoti baitais, ir jis naudoja nuo 1 iki 4 pagal simbolį. 128 ASCII simboliai užima vieną baitą, identišką įprastam, todėl ASCII tekstas yra ir galiojantis UTF-8 tekstas. Likę užima daugiau baitų.
| Simbolis | Kodo taškas | Baitai UTF-8 | Baitai (šešioliktainiai) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ž | U+017E | 2 | C5 BE |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Kodėl atsiranda „ž“ vietoj „ž“
Tai dažniausia klaida, ir ji turi tikslų paaiškinimą. „ž“ UTF-8 koduotėje yra du baitai: C5 ir BE. Jei programa mano, kad tekstas yra Latin-1 koduotės, ji skaito kiekvieną baitą kaip simbolį: C5 yra „Å“, o BE yra „¾“. Rezultatas: „ž“. Tas pats atsitinka su „é“, kuris rodomas kaip „é“, ir su „šaltis“, kuris atrodo kaip „Å¡altis“.
Sprendimas beveik visada yra nurodyti programai atidaryti failą kaip UTF-8 (teksto rengyklėje arba skaičiuoklės importavimo nustatymuose). Kai atsitinka atvirkščiai, tai yra Latin-1 tekstas, skaitomas kaip UTF-8, dažniausiai atsiranda rombai su klaustuku, nes tie pavieniai baitai nesudaro galiojančių UTF-8 sekų.
Kaip naudotis ASCII lentele ir keitikliu
Įrankis „ASCII lentelė“ rodo 128 simbolius su jų kodu dešimtainiu, šešioliktainiu, aštuntainiu ir dvejetainiu pavidalu bei valdymo simbolių pavadinimus.
- Paieškoje įrašykite simbolį, kodą arba valdymo simbolio pavadinimą (pavyzdžiui, A, 65, 41 ar LF), kad rastumėte jo eilutę.
- Naudokite filtravimo mygtukus (Valdymo, Skaitmenys, Didžiosios raidės, Mažosios raidės, Simboliai), kad matytumėte tik vieną grupę.
- Norėdami konvertuoti, įrašykite tekstą laukelyje „Tekstas“ ir pasirinkite formatą (dešimtainis, šešioliktainis, aštuntainis ar dvejetainis): apačioje atsiranda kodai. „Labas“ dešimtainiu pavidalu duoda 76 97 98 97 115, o šešioliktainiu – 4C 61 62 61 73.
- Galite daryti ir atvirkščiai: įklijuokite kodus, atskirtus tarpais ar kableliais, į „Kodai“, ir bus sudarytas tekstas. Šešioliktainėje sistemoje priimami priešdėliai, pavyzdžiui, 0x41.
Jei tekste yra ne ASCII simbolių, pavyzdžiui, ž, įrankis įspės ir parodys jų Unicode kodą. Norėdami pamatyti tikruosius baitus UTF-8 koduotėje, naudokite „Tekstas į dvejetainį kodą“: ž duoda 11000101 10111110, du 8 bitų baitus. Apribojimai: lentelėje rodomas tik standartinis ASCII, o ne išplėstinis, ir viskas skaičiuojama jūsų naršyklėje, nesiunčiant teksto į jokį serverį.
Dažniausiai užduodami klausimai
Kiek simbolių turi ASCII?
128, su kodais nuo 0 iki 127 ir po 7 bitus kiekvienas. Iš jų 33 yra valdymo, o 95 – spausdinami, skaičiuojant tarpą.
Koks yra raidžių A ir a ASCII kodas?
„A“ yra 65 (41 šešioliktainėje, 01000001 dvejetainėje), o „a“ yra 97 (61 šešioliktainėje, 01100001 dvejetainėje). Jos visada skiriasi 32.
Kuo skiriasi ASCII ir Unicode?
ASCII turi 128 simbolius, sukurtus anglų kalbai. Unicode turi daugiau nei 150 000 beveik visų kalbų simbolių ir jaustukų, o pirmieji 128 yra tokie patys kaip ASCII.
Kas yra UTF-8?
Tai dažniausiai naudojamas būdas saugoti Unicode tekstą baitais. Jis naudoja nuo 1 iki 4 baitų simboliui: ASCII simboliai užima vieną, raidė ž užima du, o jaustukas – keturis.
Kodėl mano tekste rodoma „ž“ ar „é“?
Todėl, kad UTF-8 koduotės tekstas skaitomas kaip Latin-1. Atidarykite failą nurodydami UTF-8 koduotę, ir problema išsisprendžia.