Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Что есть ANSI и ASCII

#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).

Комментариев нет:

Отправить комментарий