#c #utf_8 #ascii #ansi
Я бы хотел, наконец, разобраться, как правильно называть строки 8-ми битных символов.
Что такое строка символов UTF-8 мне хорошо понятно - это строка, каждый символ которой
представлен переменным количеством 8-ми битных блоков (байтов).
Что такое строки UTF-16/UTF-32 мне тоже ясно.
Но я не могу понять, как корректно называть восьмибитные кодировки, где первые 128
знаков строго определены, а последующие - меняются в зависимости от используемой кодовой
страницы.
Кто-то их называет ascii, кто-то ansi, или просто CP1251, если подразумевается конкретная
кодировка.
Помогите разобраться. Гугл только запутал.
Ответы
Ответ 1
ASCII (American Standard Code for Information Interchange) - первый вариант кодировки.
Потом появились CP866, KOI8-R, Windows 1251 и вот это всё.
Так что, CP1251 - это расширенная версия ASCII.
ANSI - это расширения ASCII, в которых были удалены псевдографические элементы и
добавлены символы типографики.
CP1251 - это пример ANSI кодировки.
Если на диаграмме Эйлера показать:
Ответ 2
ASCII (читается аски́) - это первая кодировка применявшаяся еще в пору когда 99%
юзеров SO еще даже не родились (1963 год). Кодировка 7-битная, то есть определено 128
символов, 8-й бит полного байта использовался для проверки четности поскольку в то
время каналы были ненадежные, то предполагалось что будет проверяться каждый полученный
байт.
Далее со временем стало понятно, что для других языков можно использовать 8-й бит
для отображения национальных символов - то есть использовать 256 символов. Эту расширенную
8-битовую кодировку условно называют ANSI (читается анси́) по названию американского
института стандартов в рамках которого и была предложена 8-битовая кодировка. Соответственно,
для каждого национального языка была предложена своя раскладка второй половины таблицы
(от 128 до 255 символа), а первая половина таблицы от 0 до 127 - изначальные символы
ASCII. KOI-8, CP-1251, 1252 и проч. - это различные инкарнации ANSI
Далее когда дело дошло до иероглифов стало понятно, что в 256 символов не уместиться
и появилась UNICODE (читается юникод) - где на 1 символ отводится 2 байта, то есть
65536 символов, где таблица была жестко поделена между национальными символами, например
таблица ASCII осталась в интервале U+0000 до U+007F, а наша с вами кириллица в интервале
U+A640 до U+A69F ну и т.д.
С нарастанием угара стало ясно что 65536 символов также не хватает, потому что появились
эмодзи, стали поднимать голову другие национальные символы справедливо указывавшие
на нехватку места в таблице UNICODE, тогда был предложен UTF-8 (читается ютиэф 8),
где количество байтов в символе имеет разную длину и может быть от 1-го до 4 байт,
что дает 1 112 064 символов.
Вот, как то так.
Ответ 3
Считаю название «восьмибитные» или «однобайтовые кодировки» вполне корректным общим
названием для подобных вещей.
Само собой, если подразумевается какая-то конкретная кодовая страница/кодировка,
то она и указывается: «KOI8-R», «CP1251» «CP1250», «ISO8859-5».
ASCII как стандарт (а это действительно стандарт — American standard code for information
interchange) определяет, если я правильно помню, только первые 127 кодов символов.
Поэтому формально символы типа «я», «č», «њ», «Ḱ» не принадлежат ASCII.
«ANSI» — это вообще исключительно русскоязычный (sic!) термин для CP1251, т.к. вообще-то
это сокращение обозначает американский национальный институт стандартизации (а «OEM»
— original equipment manufacturer).