If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Съхранение на текст в двоичен вид

Компютрите съхраняват не само числа в двоичен вид. Но как двоичните числа могат да представят не-числови данни като букви и символи?
Оказва се, че това, което е нужно, е малко помощ от човека. Трябва да се уговорим да използваме кодови таблици – съответствия между символ и двоично число.

Просто кодиране

Например – как бихме записали в двоичен вид следните символи?
☮️❤️😀
Можем да изобретим тази проста кодова таблица:
Двоично | Символ\n- | - | -\nstart text, 0, end text, start text, 1, end text\t| ☮️\nstart text, 10, end text\t| ❤️\nstart text, 11, end text\t| 😀
Да я наречем "HPE кодова таблица". Удобно е да даваме имена на кодовите таблици, за да могат програмистите да са сигурни, че използват едни и същи такива.
Ако компютърна програма трябва да запише символа ❤️ в компютърната памет, тя може да запише start text, 10, end text вместо това. Когато програмата трябва да покаже start text, 10, end text на потребителя, тя може да си припомни "HPE кодовата таблица" и вместо това да покаже❤️.
Често компютърните програми и файлове трябва да съхраняват множество символи. Могат да го постигнат, като подреждат кодовете на символите един след друг.
Дадена програма може да запише файл с наименование "msg.hpe", съдържаща следните данни:
start text, 0, end text, start text, 10111111010, end text
Програма на друг компютър, която разбира "HPE кодовата таблица", може след това да отвори "msg.hpe" и да покаже последователността от символи.
Провери наученото
Каква последователност би показала програмата?
Избери един отговор:

"HPE кодовата таблица" използва само 2 бита, което ограничава броя на символи, които може да представи.
Провери наученото
Колко символа може да представи кодова таблица с 2 бита?
  • Отговорът ти трябва да бъде
  • цяло число, като 6
  • несъкратима правилна дроб, като 3, slash, 5
  • несъкратима неправилна дроб, като 7, slash, 4
  • смесено число като 1, space, 3, slash, 4
  • точна десетична дроб като 0, point, 75
  • кратно на ПИ като 12, space, start text, p, i, end text или 2, slash, 3, space, start text, p, i, end text

С повече битове кодова таблица може да представи достатъчно букви, за да могат компютрите за съхраняват съобщения, документи и уеб страници.

ASCII кодова таблица

ASCII е била една от първите стандартизирани кодови таблици. Била е изобретена през 60-те години на XX век, когато телеграфията е била основната форма за комуникация на далечни разстояния, но все още се използва в модерните компютърни системи. start superscript, 1, end superscript
Телетипистите печатали съобщения на телепринтери като този:
Снимка на телетипна машина, съставена от клавиатура, подаващ се лист хартия с отпечатани букви и механизъм за четене на входни хартиени ленти.
Телетипна машина ASR 33. Източник на изображението: Marcin Wichary
Телепринтерът използвал ASCII стандарта, за да кодира всеки отпечатан символ в двоичен вид и след това да съхрани или изпрати двоичните данни.
Тази страница от инструкции за телепринтер от 1972 показва 128 ASCII кода:
Сканирана таблица с ASCII кодове.
ASCII таблица от принтер "TermiNet 300". Източник на изображението: Wikipedia
Всеки ASCII символ е кодиран в двоичен вид чрез 7 бита. В таблицата по-горе заглавието на колоната показва първите 3 бита, а редът показва последните 4 бита. Първоначалният символ е "NUL", кодиран като start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text.
Първите 32 кода представляват "контролни символи" – символи, които предизвикват някакъв ефект, вместо да отпечатат буква. "BEL" (кодирано в двоичен вид като start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 111, end text) предизвиква звуков сигнал. "ENQ" (кодирано като start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text) представлява заявка получаващата станция да се идентифицира.
Първоначално контролните символи са създадени за телепринтери и телеграфия, но впоследствие предназначението на много от тях е било променено за модерни компютри и интернет – особено "CR" и "LF". "CR" (start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1101, end text) представя инструкцията за телепринтери "carriage return", която връща печатащата глава в началото на реда. "LF" (start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1010, end text) представя инструкцията "line feed", която премества печатащата глава един ред надолу. Модерните интернет протоколи, като HTTP, FTP и SMTP, използват комбинацията от "CR" + "LF", за да представят "нов ред".
Останалите 96 ASCII символи изглеждат много по-познати.
Това са първите 8 главни букви от латиницата:
Двоично | Символ\n- | - | -\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1, end text | A\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text | B\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 11, end text | C\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text | D\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text | E\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 110, end text | F\nstart text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 111, end text | G\nstart text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text | H
Използвайки стандарта ASCII, можем да кодираме 4-буквено съобщение в двоичен вид:
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 11, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 110, end text
Провери наученото
Коя буква представят тези данни, кодирани в ASCII?
Избери един отговор:

Само че има няколко проблема с ASCII кодовата таблица.
Първият голям проблем е, че ASCII съдържа само букви от английската азбука и ограничен набор от символи.
Език, който използва по-малко от 128 символа, може да създаде своя версия на ASCII, за да кодира текст, който е само в този език, но не и текстов файл със символи от различни езици. ASCII не може да кодира низ като: "Hello, José, would you care for Glühwein? It costs 10 €".
А какво да кажем за езици с хиляди логограми? ASCII не може да кодира достатъчно логограми, за да покрие изречение на китайски като "你好,想要一盘饺子吗?十块钱。"
Другият проблем с ASCII кодовата таблица е, че използва 7 бита, за да представи всеки символ, докато компютрите обикновено съхраняват информацията в байтове – комбинации от по 8 бита, а програмистите не обичат да пилеят компютърна памет.
Когато най-ранните компютри започнали да използват ASCII, за да кодират символи, за различните компютри се измислили различни начини да се ползва този последен бит. Например HP компютрите използвали осмия бит, за да представят символи, използвани в европейските държави (например "£" и "Ü"), компютрите TRS-80 го използвали за цветни графики, а компютрите Atari го използвали за негативни (бяло на черен фон) версии на първите 128 символа. squared
Резултатът? Файл, създаден с ASCII в едно приложение може да изглежда доста странно, когато се отвори с друго приложение, съвместимо с ASCII.
Компютрите имали нужда от нова кодова таблица. Кодова таблица, базирана на 8 бита, която може да представи всички езици по света.

Unicode (Юникод)

Но преди това – колко символа са ти необходими, за да представиш всички езици по света? Кои символи са на практика еднакви в различните езици, дори и да звучат по различен начин?
През 1987 група компютърни инженери се опитали да отговорят на тези въпроси. В крайна сметка те създали Unicode (Юникод) - универсален набор от символи, който задава "кодова точка" (шестандесетично число) и наименование на всеки символ.cubed
Например символът "ą" се обозначава с "U+0105" и се нарича "Латинска малка буква а с опашка". Символ, приличащ на "ą", съществува в 13 езика, като полски и литовски. Ето защо, според Юникод, символът "ą" в полската дума "robią" и "ą" в литовската дума "aslą" са еднакви. Юникод спестява място като обединява символи от различни езици.
И все пак има толкова много символи за кодиране. Наборът от символи Юникод стартира със 7129 именувани символа през 1991 г. и нараства до 137 929 именувани символа до 2019 г. Болшинството от тези символи описват логограми от китайски, японски и корейски, като "U+6728", който представя "木". Включени са също така и над 1200 символа за емоджи ("U+1F389" = "🎉"). start superscript, 4, end superscript
Юникод е набор от символи, но не е кодова таблица. За щастие, друга група инженери се справили с проблема ефективно кодиране на Юникод в двоичен вид.

UTF-8

През 1992 г. компютърни инженери изобретили UTF-8 – кодова таблица, която е съвместима с кодовата таблица ASCII, но в същото време разрешава проблемите ѝ. start superscript, 5, end superscript
UTF-8 може да опише всеки символ от стандарта Юникод, като използва 1, 2, 3 или 4 байта.
Когато компютърна програма чете UTF-8 текстов файл, тя разбира колко байта представят следващия символ от това колко бита от 1 намира в началото на байта.
Брой байтовеБайт 1Байт 2Байт 3Байт 4
10xxxxxxx
2110xxxxx10xxxxxx
31110xxxx10xxxxxx10xxxxxx
411110xxx10xxxxxx10xxxxxx10xxxxxx
Ако няма битове с 1 в префикса (ако първият бит е 0), това показва, че символът е представен с един байт. Оставащите 7 бита от байта се използват, за да бъдат представени оригиналните 128 ASCII символи. Това означава, че последователност от 8-битови ASCII символи е също и валидна UTF-8 последователност.
Два байта, започващи с 110, са използвани, за да се кодира остатъкът от символи в езиците, използващи латиница (например испански, немски), както и други езици, като гръцки, иврит или арабски. Три байта, започващи с 1110, кодират повечето символи от азиатските езици (например китайски, японски, корейски). Четири байта, започващи с 11110, кодират всичко останало – от рядко използвани исторически писмености до все по-разпространените символи за емоджита.
Провери наученото
Колко символа се представят с тези 8 байта според стандарта UTF-8?
start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 1, end text, start text, 11110, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 11111, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 10, end text, start text, 0, end text, start text, 110, end text, start text, 0, end text, start text, 1, end text, start text, 1110, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 11, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 1010, end text
  • Отговорът ти трябва да бъде
  • цяло число, като 6
  • несъкратима правилна дроб, като 3, slash, 5
  • несъкратима неправилна дроб, като 7, slash, 4
  • смесено число като 1, space, 3, slash, 4
  • точна десетична дроб като 0, point, 75
  • кратно на ПИ като 12, space, start text, p, i, end text или 2, slash, 3, space, start text, p, i, end text

Повечето модерни програмни езици имат вградена поддръжка за UTF-8, така че на повечето програмисти никога не им се налага да разберат как се превръщат символи в двоичен вид.
✏️ Опитай се във формата по-долу да кодираш символни низове в UTF-8, използвайки JavaScript. Изпробвай различни езици и символи.
В момента стандартът UTF-8 е най-разпространеното кодиране на HTML файлове в световната мрежа, като към декември 2019 г. е използван за 94,5% от уеб страниците.start superscript, 6, end superscript
🔎 Ако сега щракнеш с десния бутон на мишката и избереш "view page source (покажи изходния код на страницата)" на тази уеб страница, можеш да потърсиш за низа "utf-8" и да се увериш, че тя е кодирана с UTF-8.
Най-общо казано, добрата кодова таблица е тази, която може да представи максимално количество информация с най-малък брой битове. UTF-8 е прекрасен пример за това, тъй като може да кодира обикновените английски символи само с един байт, но е достатъчно гъвкава, за да кодира хиляди букви с допълнителни байтове.
Само че UTF-8 е само една възможна кодова таблица. UTF-16 и UTF-32 са други кодови таблици, които също са способни да представят всички Юникод символи. Съществуват и кодови таблици, специфични за конкретен език, като Shift-JIS за японски. Компютърните програми могат да използват кодовата таблица, която е най-подходяща за техните цели и ограничения.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Имаш ли въпроси по темата? Ще се радваме да ти отговорим, просто задай въпросите си по-долу!

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.