ASCII и Unicode: какво са и за какво служат

Компютърът разбира само числа, така че всяка буква, която виждате на екрана, е код. ASCII е първата таблица с кодове, която става стандарт, а Unicode е тази, която ползваме днес, за да пишем на всеки език. Тук ще видите как работят, кои кодове е добре да знаете, защо понякога вместо буквите се появяват странни символи и как да проверите всичко в таблицата.

Обновено:

Какво е кодиране на знаци

Кодирането е уговорка: «числото 65 означава буквата A». Когато пишете текст, програмата запазва тези числа; когато друг човек го отвори, неговата програма ги превежда обратно в букви по същата уговорка. Ако двамата не ползват една и съща таблица, текстът излиза грешен.

Трябва да разграничим две идеи. Едната е наборът от знаци, списъкът кои числа на кои символи съответстват. Другата е как тези числа се записват в байтове. В ASCII двете съвпадат по тривиален начин; в Unicode не, и тук влиза UTF-8.

ASCII: 128 знака от 7 бита

ASCII (съкращение от American Standard Code for Information Interchange) е стандартизиран през 60-те години на XX век. Ползва 7 бита, тоест 2 на степен 7 = 128 кода, от 0 до 127. От тях 33 са управляващи знаци (от 0 до 31 и 127), а 95 са печатни (от 32 до 126, включително интервала).

Не включва букви с диакритични знаци, нито кирилица, нито знака за евро: проектиран е за английския. Това обяснява защо по-късно са били нужни други таблици.

Кодовете, които ще срещате най-често. Интервалът (32) се брои за печатен, въпреки че не се вижда.
Управляващ знакДесетичноШестнадесетичноДвоично (7 бита)За какво служи
Нула (NUL)0000000000Бележи края на низ в няколко езика
Хоризонтална табулация (TAB)9090001001Прескача до следващата табулация
Нов ред (LF)100A0001010Слиза на следващия ред
Връщане на каретката (CR)130D0001101Връща се в началото на реда
Escape (ESC)271B0011011Започва управляващи последователности
Интервал32200100000Първият печатен знак
Изтриване (DEL)1277F1111111Изтрива знака

Закономерности, които е добре да запомните

Таблицата не е подредена случайно. С няколко закономерности можете да четете кодове наизуст.

Край на реда: LF, CR и CRLF

Преминаването на нов ред изглежда нещо просто, но се записва различно според системата. Unix, Linux и macOS ползват един знак, LF (10). Windows ползва два последователни, CR и LF (13 и 10), известни като CRLF. Старите телетайпи са имали нужда от две отделни команди: връщане на каретката в началото и придвижване на хартията с един ред.

Тази разлика е причина за файлове, които в обикновен редактор се виждат на един ред, или със странен символ в края на всеки ред. Ако търсите кой код има всеки от тях, напишете LF или CR в търсачката на ASCII таблица.

«Разширеният ASCII» не е стандарт

Тъй като един байт има 8 бита, а ASCII ползва само 7, оставали са 128 свободни кода (от 128 до 255) и всеки производител и регион ги е запълнил по свой начин. Това се нарича «разширен ASCII», но не съществува една-единствена таблица: има много, наречени кодови страници. Две от най-известните са Latin-1 (ISO-8859-1), където é е код 233, и Windows-1252, подобна, но с разлики в кодовете от 128 до 159 (там е например еврото).

Проблемът е, че код 233 означава «é» в една таблица и нещо друго в друга. Текст, написан с една таблица и прочетен с друга, показваше боклук. Unicode се ражда, за да сложи край на този безпорядък.

Unicode и UTF-8

Unicode присвоява уникално число, наречено кодова точка, на всеки знак от почти всички писмености в света, плюс символи и емоджита. Днес съдържа над 150000 знака. Записва се с префикса U+ и в шестнадесетична система: «A» е U+0041, «ñ» е U+00F1, еврото е U+20AC, а емоджито с усмихнато лице е U+1F600. Първите 128 кодови точки са точно тези на ASCII.

UTF-8 е най-разпространеният начин за запазване на тези числа в байтове и ползва от 1 до 4 според знака. 128-те знака на ASCII заемат един байт, идентичен с досегашния, така че един ASCII текст е същевременно валиден UTF-8 текст. Останалите заемат повече байтове.

Колкото по-далеч от ASCII, толкова повече байтове заема знакът.
ЗнакКодова точкаБайтове в UTF-8Байтове (шестнадесетично)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Защо се появява «Ã±» вместо «ñ»

Това е най-честата грешка и има точно обяснение. Буквата ñ в UTF-8 са два байта: C3 и B1. Ако програмата реши, че текстът е в Latin-1, чете всеки байт като отделен знак: C3 е «Ã», а B1 е «±». Резултат: «Ã±». Същото се случва с «é», което се вижда като «Ã©», и с «canción», което се появява като «canción». При кирилица е същото, само че всяка буква са два байта и на екрана се сипят двойки странни знаци.

Решението почти винаги е да кажете на програмата да отвори файла като UTF-8 (в текстов редактор или в настройките за внос на електронна таблица). Когато стане обратното, текст в Latin-1, прочетен като UTF-8, обикновено се появяват ромбове с въпросителна, защото тези единични байтове не образуват валидни UTF-8 последователности.

Как да ползвате ASCII таблицата и конвертора

Инструментът «ASCII таблица» показва 128-те знака с техния код в десетична, шестнадесетична, осмична и двоична система и името на управляващите.

  1. Напишете в търсачката знак, код или името на управляващ знак (например A, 65, 41 или LF), за да намерите неговия ред.
  2. Ползвайте бутоните за филтриране (Управляващи, Цифри, Главни букви, Малки букви, Знаци), за да видите само една група.
  3. За преобразуване напишете текст в «Текст» и изберете формата (десетичен, шестнадесетичен, осмичен или двоичен): отдолу се появяват кодовете. «Hola» дава 72 111 108 97 в десетичен и 48 6F 6C 61 в шестнадесетичен вид.
  4. Можете и обратното: поставете кодове, разделени с интервали или запетаи, в «Кодове» и се съставя текстът. В шестнадесетичен вид се приемат префикси като 0x41.

Ако текстът съдържа знаци, които не са ASCII, като ñ, инструментът ви предупреждава и показва техния Unicode код. За да видите реалните байтове в UTF-8, ползвайте «Текст в двоичен код»: ñ дава 11000011 10110001, два байта по 8 бита. Ограниченията: таблицата показва само стандартния ASCII, не разширения, и всичко се изчислява във вашия браузър, без да се изпраща текстът към сървър.

Често задавани въпроси

Колко знака има ASCII?

128, с кодове от 0 до 127 и по 7 бита всеки. От тях 33 са управляващи и 95 са печатни, като се брои и интервалът.

Какъв е ASCII кодът на буквата A и на a?

«A» е 65 (41 в шестнадесетична, 01000001 в двоична система), а «a» е 97 (61 в шестнадесетична, 01100001 в двоична система). Винаги се различават с 32.

Каква е разликата между ASCII и Unicode?

ASCII има 128 знака, предвидени за английския. Unicode има над 150000, от почти всички езици и емоджита, а първите му 128 са същите като в ASCII.

Какво е UTF-8?

Това е най-разпространеният начин да се запазва Unicode текст в байтове. Ползва от 1 до 4 байта на знак: тези от ASCII заемат един, ñ заема два, а едно емоджи заема четири.

Защо текстът ми показва «Ã±» или «Ã©»?

Защото текст, запазен в UTF-8, се чете като Latin-1. Отворете файла, като укажете кодирането UTF-8, и проблемът се решава.