Докато повечето от нас вероятно никога не са спирали да мислят за това, азбучните знаци не са еднакви по размер на броя байтове, които са необходими, за да ги представят. Но защо? Днешната публикация "SuperUser Q & A" има отговорите на въпроса на любознателен читател.
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Частичен ASCII графичен екран с любезното съдействие на Уикипедия.
Четецът на SuperUser khajvah иска да знае защо различни азбуки заемат различни размери на дисково пространство, когато са запазени:
Когато поставя "а" в текстов файл и го запазя, той го прави 2 байта по размер. Но когато вмъкна един знак като "Ђ" (писмо от арменската азбука), той го прави 3 байта по размер.
Каква е разликата между азбуките на компютъра? Защо англичаните поемат по-малко място, когато се запазват?
Писма са писма, нали? Може би не! Какъв е отговорът на тази азбучна мистерия?
Доставчиците на SuperUser Doktoro Reichard и ernie имат отговор за нас. Първо, Докторе Райхард:
Една от първите кодиращи схеми, които ще бъдат разработени за използване в обикновените компютри, е ASCII (Американски стандартен код за обмен на информация) стандарт. Разработена е през 60-те години на миналия век в САЩ.
Английската азбука използва част от латинската азбука (например има няколко думи с ударение на английски). Има 26 отделни букви в тази азбука, без да се обмисля случай. Също така трябва да съществуват индивидуалните номера и препинателни знаци във всяка схема, която претендира да кодира английската азбука.
Шесттедесетте години също бяха време, когато компютрите нямаха достатъчно количество памет или дисково пространство, което имаме сега. ASCII е разработен като стандартно представяне на функционална азбука във всички американски компютри. По това време решението за направата на всеки ASCII символ с дължина 8 бита (1 байт) е направено поради техническите детайли на времето (статията в Уикипедия споменава факта, че перфорираната лента е имала 8 бита в позиция наведнъж). Всъщност, оригиналната ASCII схема може да се предава чрез 7 бита, а осмата може да се използва за проверка на паритета. По-късните разработки разшириха оригиналната ASCII схема, като включиха няколко знака с ударения, математически и терминални знаци.
С неотдавнашното увеличаване на употребата на компютри в целия свят, все повече хора от различни езици имат достъп до компютър. Това означава, че за всеки език трябваше да се разработят нови кодиращи схеми, независимо от други схеми, които биха се оказали конфликтни, ако се четат от различни езикови терминали.
Unicode се появи като решение за съществуването на различни терминали чрез сливане на всички възможни смислени знаци в един абстрактен набор от знаци.
UTF-8 е един от начините за кодиране на набор от символи на Unicode. Това е кодиране с променлива ширина (т.е. различни знаци може да има различни размери) и е проектирано за обратна съвместимост с предишната схема ASCII. Като такъв, наборът знаци ASCII ще остане с един байт по размер, докато всички други знаци са с два или повече байта по размер. UTF-16 е друг начин за кодиране на набор от символи на Unicode. В сравнение с UTF-8, знаците се кодират като набор от един или два 16-битови кодови единици.
Както е посочено в други коментари, символът "a" заема единичен байт, докато "Ђ" заема два байта, обозначаващ кодиране на UTF-8. Допълнителният байт в оригиналния въпрос се дължи на съществуването на нов ред в края.
Последвано от отговора от ernie:
1 байт е 8 бита и по този начин може да представлява до 256 (2 ^ 8) различни стойности.
За езици, които изискват повече възможности от това, не може да се поддържа проста картотека от 1 до 1, затова е необходимо да се съхраняват повече данни, за да се съхрани даден символ.
Обърнете внимание, че обикновено повечето кодировки използват първите 7 бита (128 стойности) за ASCII знака. Това оставя 8-ми бит или 128 повече стойности за повече знаци. Добавете с акредитирани знаци азиатски езици, кирилица и т.н. и лесно можете да разберете защо 1 байт не е достатъчен за задържане на всички знаци.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.