ASCII ir Unicode: kas tai ir kam jie skirti

Kompiuteris supranta tik skaičius, todėl kiekviena ekrane matoma raidė yra kodas. ASCII buvo pirmoji kodų lentelė, tapusi standartu, o Unicode yra tai, ką naudojame šiandien rašydami bet kuria kalba. Čia matysite, kaip jie veikia, kuriuos kodus verta žinoti, kodėl vietoj diakritinių ženklų kartais atsiranda keisti simboliai ir kaip viską pasitikrinti lentelėje.

Atnaujinta:

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ų.

Kodai, su kuriais susidursite dažniausiai. Tarpas (32) laikomas spausdinamu, nors jo nesimato.
Valdymo simbolisDešimtainisŠešioliktainisDvejetainis (7 bitai)Kam skirtas
Nulis (NUL)0000000000Keliose kalbose žymi eilutės pabaigą
Horizontalus tabuliavimas (TAB)9090001001Peršoka į kitą tabuliavimo vietą
Eilutės pastūmimas (LF)100A0001010Nusileidžia į kitą eilutę
Grįžimas į eilutės pradžią (CR)130D0001101Grįžta į eilutės pradžią
Pabėgimas (ESC)271B0011011Pradeda valdymo sekas
Tarpas32200100000Pirmasis spausdinamas simbolis
Ištrynimas (DEL)1277F1111111Ištrina simbolį

Ryšiai, kuriuos verta atsiminti

Lentelė nesudaryta atsitiktinai. Su keliais dėsningumais kodus galima skaityti mintinai.

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ų.

Kuo toliau nuo ASCII, tuo daugiau baitų užima simbolis.
SimbolisKodo taškasBaitai UTF-8Baitai (šešioliktainiai)
AU+0041141
éU+00E92C3 A9
žU+017E2C5 BE
€U+20AC3E2 82 AC
😀U+1F6004F0 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.

  1. Paieškoje įrašykite simbolį, kodą arba valdymo simbolio pavadinimą (pavyzdžiui, A, 65, 41 ar LF), kad rastumėte jo eilutę.
  2. Naudokite filtravimo mygtukus (Valdymo, Skaitmenys, Didžiosios raidės, Mažosios raidės, Simboliai), kad matytumėte tik vieną grupę.
  3. 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.
  4. 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.