Укажите все восьмибитные кодировки

Укажите все восьмибитные кодировки

Инструменты пользователя

Инструменты сайта

Содержание

В общем случае кодировка или кодовая таблица — это однозначное соответствие между подмножеством целых чисел (как правило, идущих подряд) и некоторым набором символов. Ключевым здесь является понятие символа. Символ может быть буквой (а может и не быть), может соответствовать звуку речи (а может и не соответствовать) и может быть представлен графическим знаком (но может обходиться и без какого бы то ни было видимого образа). Символ — это атом смысла, мельчайшая неделимая частица информации.

Так, латинское «А» и кириллическое «А» — это разные символы, потому что они употребляются в разных контекстах и несут в себе разную информацию.

Определяющим для любой кодировки является количество охватываемых ею кодов и, соответственно, символов. Поскольку тексты в компьютере хранятся в виде последовательности байтов, большинство кодировок естественным образом распадаются на однобайтовые, или восьмибитные, способные закодировать не больше 256 символов, и двухбайтовые, или шестнадцатибитные, чья емкость может достигать 65636 знакомест.

Если кодировка ISO 8859-5 для кириллицы так и не прижилась, первая из этой серии — кодировка ISO 8859-1, известная также под именем Latin-1, — сумела стать общепринятым стандартом для кодирования «расширенной» латиницы. В эту кодировку включены почти все символы, употребляющиеся в письменностях западноевропейских языков — французского, немецкого, испанского и т.д.

В 1991 году была предпринята попытка создать единую универсальную двухбайтовую кодировку, охватывающую все алфавиты и иероглифические системы мира. Результатом стал стандарт под названием Unicode, покрывающий не только системы письменности всех живых и большинства мертвых языков мира, но и множество музыкальных, математических, химических и прочих символов. Массовое применение Unicode в документах и программах остается делом будущего, для web- дизайнера эта кодировка имеет особое значение, так как именно она объявлена «стандартной кодировкой документа» в HTML начиная с версии 4.

В ближайшее время все более важную роль будет играть особый формат Unicode (и ISO 10646) под названием UTF-8. Эта «производная» кодировка пользуется для записи символов цепочками байтов различной длины (от одного до шести), которые с помощью несложного алгоритма преобразуются в Unicode- коды, причем более употребительным символам соответствуют более короткие цепочки. Главное достоинство этого формата — совместимость с ASCII не только по значениям кодов, но и по количеству бит на символ, так как для кодирования любого из первых 128 символов в UTF-8 достаточно одного байта (хотя, например, для букв кириллицы нужно уже по два байта).

Для указания кодировки символов web-страницы используются следующие обозначения кодовых таблиц:

UTF-8 от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. Стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D. Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в UNIX-подобных операционных системах [1] . Формат UTF-8 был разработан 2 сентября 1992 года Кеном Томпсоном и Робом Пайком, и реализован в Plan 9 [2] . Идентификатор кодировки в Windows – 65001 [3] .

UTF-8, по сравнению с UTF-16, наибольший выигрыш в компактности даёт для текстов на латинице, поскольку латинские буквы без диакритических знаков, цифры и наиболее распространённые знаки препинания кодируются в UTF-8 лишь одним байтом, и коды этих символов соответствуют их кодам в ASCII. [4] [5]

Содержание

Алгоритм кодирования [ править | править код ]

Алгоритм кодирования в UTF-8 стандартизирован в RFC 3629 и состоит из 3 этапов:

1. Определить количество октетов (байтов), требуемых для кодирования символа. Номер символа берётся из стандарта Юникода.

Диапазон номеров символов Требуемое количество октетов
00000000-0000007F 1
00000080-000007FF 2
00000800-0000FFFF 3
00010000-0010FFFF 4
Читайте также:  Как удалить все фото с андроида

Для символов Юникода с номерами от U+0000 до U+007F (занимающими один байт c нулём в старшем бите) кодировка UTF-8 полностью соответствует 7-битной кодировке US-ASCII.

2. Установить старшие биты первого октета в соответствии с необходимым количеством октетов, определённом на первом этапе:

  • 0xxxxxxx — если для кодирования потребуется один октет;
  • 110xxxxx — если для кодирования потребуется два октета;
  • 1110xxxx — если для кодирования потребуется три октета;
  • 11110xxx — если для кодирования потребуется четыре октета.

Если для кодирования требуется больше одного октета, то в октетах 2-4 два старших бита всегда устанавливаются равными 102 (10xxxxxx). Это позволяет легко отличать первый октет в потоке, потому что его старшие биты никогда не равны 102.

Количество октетов Значащих бит Шаблон
1 7 0xxxxxxx
2 11 110xxxxx 10xxxxxx
3 16 1110xxxx 10xxxxxx 10xxxxxx
4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

3. Установить значащие биты октетов в соответствии с номером символа Юникода, выраженном в двоичном виде. Начать заполнение с младших битов номера символа, поставив их в младшие биты последнего октета, продолжить справа налево до первого октета. Свободные биты первого октета, оставшиеся незадействованными, заполнить нулями.

Примеры кодирования [ править | править код ]

Символ Двоичный код символа UTF-8 в двоичном виде UTF-8 в шестнадцатеричном виде
$ U+0024 100100 00 100100 24
¢ U+00A2 10 100010 110 00010 10 100010 C2 A2
U+20AC 10 0000 10 101100 1110 0010 10 000010 10 101100 E2 82 AC
�� U+10348 1 0000 0011 01 001000 11110 000 10 010000 10 001101 10 001000 F0 90 8D 88

Маркер UTF-8 [ править | править код ]

Для указания, что файл или поток содержит символы Юникода, в начале файла или потока может быть вставлен маркер последовательности байтов (англ. Byte order mark, BOM ), который в случае кодирования в UTF-8 принимает форму трёх байтов: EF BB BF16 .

1-й байт 2-й байт 3-й байт
Двоичный код 1110 1111 1011 1011 1011 1111
Шестнадцатеричный код EF BB BF

Пятый и шестой байты [ править | править код ]

Изначально кодировка UTF-8 допускала использование до шести байтов для кодирования одного символа, однако в ноябре 2003 года стандарт RFC 3629 запретил использование пятого и шестого байтов, а диапазон кодируемых символов был ограничен символом U+10FFFF . Это было сделано для обеспечения совместимости с UTF-16.

6.1 Кодировки

6.1.1. Представление символов целыми числами

Как уже указывалось в "лекции 5" , все символы в ЭВМ представлены в виде целых чисел. Порядок соответствия литер символов целым числам называется кодировкой (или кодовой таблицей, таблицей символов ). В зависимости от размера таблицы символов разрядность этих целых чисел равна 1 байт (для кодировок EBCDIC и всех вариантов ASCII) , 2 байта (для кодировок Unicode) или переменной длины (UTF-8, UTF-7 и др.). Более подробно о кодировках будет сказано ниже.

6.1.2. Кодировки

Вначале возникли кодировки, включающие в себя десятичные цифры, буквы (прописные и строчные) латинского алфавита, сокращения английского языка (такие как "&" и "@"), знаки препинания и специальные символы. На основе этих символов возникли кодировки EBCDIC (более старая) и ASCII (более новая, используемая до сих пор). Преимущества кодировки ASCII в том, что расположение латинских букв в ней не только упорядочено по алфавиту (как это сделано во всех кодировках), но и расположены эти буквы "без разрывов", то есть присутствует сплошная нумерация букв от A до Z и от a до z. Это позволяет лучше реализовать алгоритмы сравнения символов и сортировку строк символов.

Кодировки EBCDIC и ASCII являются 7-ми битными кодировками, хотя они и занимают 1 байт. Самый старший (нулевой) бит является либо резервным, либо используется для контроля четности при передаче данных.

6.1.3. Восьмибитные кодировки

Однако в кодировке ASCII отсутствуют даже некоторые символы (умляуты) западноевропейских алфавитов. Что же говорить о кириллических символах. Для решения этой проблемы были созданы расширенные кодировки ASCII, в которых для представления символов используются все восемь бит. Это доводит количество закодированных символов до 256. Среди реализаций кириллических символов в расширенных ASCII кодировках можно отметить кодировки OEM 866 (MS-DOS), ANSI cp 1251 (Windows) и KOI8 -R (все клоны UNIX и VAX ).

Читайте также:  Массив в конструкторе java

Относительно полно концепция "сплошной нумерации" применяется в кодировке USSR GOST и ANSI cp 1251. Кодировка USSR GOST должна была заменить кодировку OEM 866 на компьютерах, производимых в СССР. Однако, по ряду причин, этого не произошло, и в настоящее время эта кодировка является "мертвой".

Исторически первой кодировкой с кириллическими символами была кодировка KOI8 . В ней латинские буквы с кодами 128-255 были заменены кириллическими символами в той же транскрипции. К сожалению, эта кодировка сейчас почти сошла на "нет" по следующим причинам:

  1. Этот стандарт не поддержали производители компьютерного оборудования за рубежом;
  2. Отсутствие "сплошной" нумерации кириллического алфавита;
  3. Невозможность совместного использования кириллицы и умляутов;
  4. "Неправильная" реализация символов псевдографики.

Следом за этой кодировкой на российские компьютеры вначале пришла болгарская, а затем — и альтернативная русская кодировка ДОС, впоследствии переименованная в OEM 866. Преимущества этой кодировки:

  1. Компактность;
  2. Частично сплошная нумерация символов;
  3. Полная совместимость с MS-DOS;
  4. Корректная реализация символов псевдографики;
  5. "Нормальная" обработка символов на всех платформах;
  6. Наличие коммерческих и некоммерческих знакогенераторов для этой платформы.

Недостатками этой кодировки являются:

  1. Привязанность к MS-DOS, вместе с которой эта кодировка "умирает";
  2. Невозможность совместного использования кириллицы и умляутов;
  3. Общий недостаток всех восьмибитных кодировок — ограничение на кодирование только 256-ю символами.

Кодировка ANSI cp 1251 получила широкое распространение из-за продвижения продукции корпорации Microsoft, прежде всего Microsoft Windows и Microsoft Word, на Российский рынок. Эта кодировка имеет большие преимущества перед другими кириллическими кодировками:

  1. Компактность;
  2. Сплошная нумерация символов (кроме "е" и "Ё");
  3. Стандартность.

Однако у этой кодировки есть недостатки:

  1. Привязанность в основном к платформе Microsoft Windows;
  2. Некорректная обработка многими программами символов с номерами 254 и 255 ("ю" и "я");
  3. Невозможность совместного использования кириллицы и умляутов.

6.1.4.Многоразрядные кодировки

К "многоразрядным" кодировкам относятся кодировки Unicode и UTF. Рассмотрим историю их возникновения.

Уже в начале 90-х годов XX века стало ясно, что 256 чисел для кодирования символов очень мало. Например, с помощью этих чисел нельзя кодировать все символы европейских алфавитов. Поэтому появились русские, западноевропейские, восточноевропейские, балтийские, не говоря уже об арабских, турецких кодировках и кодировках на иврите, каждая из которых содержала 256 символов. Что же говорить о вьетнамском алфавите, корейских, японских и китайских иероглифах, каждые из которых содержат более 256 символов? Для этой цели был разработан специальный стандарт на кодировку символов 16-ти разрядными целыми числами (2 байта) — Unicode. Полностью с помощью 16-ти разрядных чисел можно представить более 65 тысяч символов, что с избытком хватит для кодирования всех литер основных языков земли.

При всей полезности кодировки символов Unicode следует отметить ее недостаток — вдвое больший размер кода, чем при использовании 8-ми разрядных кодировок. Этот недостаток особенно заметен при использовании только латинских букв. Поэтому вскоре был принят стандарт на кодировку UTF. В ней символы кодируются числом переменной разрядности: 7-ми разрядными кодами ASCII для латинских букв и 16-ти разрядными символами Unicode для всех остальных литер алфавита. За эту "экономию" приходится расплачиваться людям, пишущих на отличном от английского языка — работа с символами в кодировке UTF более сложная, чем в других кодировках. Это надо помнить!

Примечание. Кодировка UTF-8 стала стандартом в операционной системе Linux и в Интернете. При разработке приложений в Microsoft Window, начиная с версии 98, также широко используются кодировки UTF-8 и UTF-7.

Читайте также:  64 Разрядный процессор intel

6.2. Примитивные символьные данные

В качестве "примитивных" символьных данных чаще всего используются массивы "символьных" типов данных. При этом максимальная длина этого массива (то есть максимальный индекс , который может принимать этот массив ) фиксируется либо программистом, либо системой программирования (например, конкретной реализацией компилятора).

В таблице 6.1 даются описания символьных данных, их размерности и обозначение.

Таблица 6.1. Символьные типы данных

Тип данных Префикс/Окончание Разрядность регистров/длина Примечание
Quick Basic
STR $ Переменная длина (до 255 символов) Для хранения 1 символа в кодировке ASCII. Не защищен от изменений.
VB Script
Variant в зависимости от конкретного значения Переменная длина Используется для хранения всех видов данных.
Java
char с 2 байта Для хранения одного символа в кодировке Unicode
String str Переменная длина Класс для хранения символов в кодировке Unicode. Защищено от изменений!
javascript
variant в зависимости от конкретного значения Переменная длина Используется для хранения всех видов данных.
C/C++
char с 1 байт Для хранения одного символа в кодировке ASCII (со знаком)
unsigned char uc 1 байт Для хранения одного символа в кодировке ASCII (без знака)
char * pc от 2 до 4 байт Указатель на массив (переменной длины)
unsigned char * puc от 2 до 4 байт Указатель на массив (переменной длины)
C/C++ Windows API
BYTE b 1 байт Эквивалентен unsigned char
NPSTR npsz 2 байта Эквивалентен char near *
LPSTR lpch 4 байта Эквивалентен char far *
LPCSTR lpsz 4 байта Эквивалентен const char far *
C++ MFC
CString cstr, str Переменная длина Класс для хранения символов в кодировке Unicode. Защищено от изменений!
C++ Classlib
string str Переменная длина Класс для хранения символов в кодировке ASCII (и Unicode?). Защищено от изменений!

Обычно, в начале работы программы, весь массив символьных данных заполняют нулевой константой (она обозначается на языке Си как " "). Это делается в расчете на то, что признаком конца символьных данных является не признак конца строки, не пробельный символ , а именно этот нулевой символ. Поэтому заполнение массива нулевыми символами заведомо гарантирует, что не случится ошибка типа размещения символьных данных за границами массива, после одиночного нулевого символа.

Что касается максимальной длины символьной строки, то она может принимать значения от 255 (языки " Паскаль ", "Quick Basic ", СУБД dBase III+), 2047 (Multi Edit и часть редакторов) и даже

64 Кбайт (величина сегмента памяти процессора x86 ). Но, следующий нехитрый расчет показывает, что использовать длину строки более 2000 (80*25) символов нерационально (она все равно не уместится на экране).

Также автор советует не доверять своей памяти в использовании максимальной длины строки, а определить ее в виде константы целого значения (например, константного типа const unsigned short на языке Си ).

Следующим "джентльменским соглашением" при работе с символьными данными является неизменность значений массивов символьных данных (кроме, возможно, первого массива в выражении) при символьных вычислениях. Вот почему большинство символьных функций принимает тип аргументов как const char * ( указатель на начало массива символьных констант ). Именно к этому типу необходимо принудительно приводить Ваши переменные в программе!

Итак, организация работы с "примитивными" символьными массивами данных следующая:

  1. Создается (функцией malloc ) или объявляется (в начале блока программ) необходимое количество символьных массивов-переменных;
  2. Они инициализируются нулевыми символами (функцией memset );
  3. Производятся операции с символьными данными:
    • ввод;
    • присвоение им константных значений;
    • замена, добавление или "обрезание" значений этих переменных;
    • вывод символьных значений;

    Собственно стандартные функции для работы с символьными типами данных (в том числе и с примитивными данными) на языках Си и C++, вместе с комментариями, приведены в таблице 6.2.

    Ссылка на основную публикацию
    Троттлинг процессора что это
    Простой компьютерный блог для души) Всем привет. Сегодня мы затронем тему процессоров, а если быть точнее, то такое явление как...
    Схема indesit wisl 83
    Инструкции и файлы Файл Страниц Формат Размер Действие 12 pdf 250.49KB Чтобы ознакомиться с инструкцией выберите файл в списке, который...
    Схема блока питания для шуруповерта 12 вольт
    Аккумуляторный шуруповерт – удобный и необходимый в хозяйстве инструмент. При эксплуатации «от случая к случаю», он может верой и правдой...
    Троянские программы и хакерские утилиты
    В данную категорию входят программы, осуществляющие различные несанкционированные пользователем действия: сбор информации и ее передачу злоумышленнику, ее разрушение или злонамеренную...
    Adblock detector