Кодирование символов (информатика)

Эта статья входит в число готовых статей
Материал из «Знание.Вики»

Кодирование символов в информатике — это процесс присвоения каждому из символов какого-либо алфавита (буквам, цифрам, знакам препинания и вспомогательным символам) уникального цифрового кода, который представлен одним или несколькими байтами. В свою очередь, совокупность этих кодов представляет собой соответствующую кодовую таблицу (кодовую страницу). В настоящее время более употребим термин «набор символов» (англ. character set), который узаконен международным стандартом RFC2278[1], так как термин кодовая таблица, как правило, обозначает частный случай таблицы набора символов с однобайтовым кодированием.

Кодирование символов в компьютере

Процесс кодирования символов, позволяющий представить текстовую информацию в виде машинного кода, активно используется в самых разных языках программирования, например таких как Java[2], Perl[3], XSLT[4], а также в HTML[5].

В настоящее время преобладают три типа кодировок: 8-ми битовые ASCII[6] и EBCDIC[7] и 16-битовые кодировки, основанные на Юникоде[8]. Представление UTF-8 в Юникоде полностью совместимо с ASCII. Кодировки на основе EBCDIC (такие как ДКОИ) применяются лишь на некоторых мэйнфреймах. Ранее каждая операционная система имела свой собственный набор символов. На сегодняшний день используемые наборы символов стандартизованы и зависят от типа операционной системы как дань традиции и определяются локальными настройками[9].

Для примера ниже приведена часть кодовой таблицы ASCII (для символов, цифр и буквы латинского алфавита):

Hex
0-3
bit
Hex
4-7
bit
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 Пробел ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~

где сочетание цифр из вертикального и горизонтального заголовков таблицы в совокупности представляют собой шестнадцатеричное число, являющееся кодом соответствующего символа. Например:

шестнадцатеричное число 3016 является кодом цифры «0». В двоичном представлении это будет 001100002
шестнадцатеричное число 4A16 является кодом прописной буквы «J». В двоичном представлении это будет 010010102
шестнадцатеричное число 6A16 является кодом строчной буквы «j». В двоичном представлении это будет 011010102

8-битовые компьютеры отличались небольшими объёмами оперативной и постоянной памяти, поэтому многобайтовые кодировки в этих устройствах не получили широкого применения. Это объясняется не только большим размером текстов в таких кодировках, но и недостаточным количеством памяти для хранения графики дополнительных символов, а также сложностями в обработке таких строк. В наши дни наиболее часто встречаются следующие стандартные однобайтовые кодировки:

  • В англоязычных программах — CP437;
  • В русскоязычных программах используются такие варианты[10]:
    • CP866 — с этими кодировками работают более опытные пользователи, работавшими ранее в DOS. Они поддерживает псевдографические «рамки», но требует хранения оригинального текста ПО в данной кодировке, что может создать трудности для новичков;
    • CP1251 — вариант удобен, когда требуется сохранять русские символы в непрерывном массиве для удобства их обработки, и если используется ОС Windows, возможно перекодировать текст без дополнительных утилит. Однако, не поддерживает рисование «рамок».

Автоматическое распознавание кодировок

В различных современных текстовых процессорах и интернет-браузерах присутствует функция автоматического определения кодировок, однако в некоторых случаях текст, введенный, например, в командной строке или ряде программ, неверно интерпретируется, и вместо осмысленного текста появляются нечитаемые символы. Решить проблему чтения такого текста могут многочисленные онлайн декодеры текста.

При работе с однобайтовыми кодировками важно помнить, что частотность использования различных символов может значительно различаться (например, в русском языке часто встречается «о», а знак «ъ» используется редко). Поэтому, зная язык исходного текста, можно выбрать кодировку, в которой частотный профиль байтов лучше соответствует частоте букв этого языка.[11] Однако такие эвристические методы определения кодировки текста сегодня не используются, поскольку современные технологии в большинстве случаев позволяют безошибочно определить правильную кодовую страницу (как в случае с MIME).

Распространённые кодировки

Универсальные кодовые страницы, имеющие широкое распространение[12]:

См. также

Ссылки

Примечания

  1. RFC 2278. Network Working Group (1998). Дата обращения: 14 октября 2024.
  2. Перечень основных «кодировок» в руководстве по Java SE 6. Дата обращения: 15 октября 2024. Архивировано 16 декабря 2008 года.
  3. Обсуждение темы «кодировок» в документации по языку Perl. Дата обращения: 15 октября 2024. Архивировано 6 октября 2008 года.
  4. Обсуждение темы «кодировок» в документации по технологии XSLT. Дата обращения: 15 октября 2024. Архивировано 13 августа 2017 года.
  5. Обсуждение соотношения терминов «кодировка» и «набор символов» в документации по языку HTML. Дата обращения: 15 октября 2024. Архивировано 26 октября 2008 года.
  6. ASCII (англ.). The Cambridge English Dictionary. dictionary.cambridge.org. Дата обращения: 15 октября 2024. Архивировано 27 сентября 2017 года.
  7. Extended Binary Coded Decimal Information Code. Dictionary of Computer and Internet Terms. Дата обращения: 14 октября 2024. Архивировано 7 сентября 2010 года.
  8. The Unicode® Standard: A Technical Introduction. The Unicode Standard. Дата обращения: 15 октября 2024. Архивировано 10 марта 2010 года.
  9. Спецификации наборов символов на сайте IANA. Дата обращения: 15 октября 2024. Архивировано 16 июля 2004 года.
  10. Кодовые страницы. Информатика 54. Дата обращения: 15 октября 2024.
  11. Универсальный декодер — конвертер кириллицы. Дата обращения: 15 октября 2024. Архивировано 28 декабря 2014 года.
  12. Кодировки символов и формат UTF-8 (14 апреля 2024). Дата обращения: 15 октября 2024.