Jump to content

Кодировка символов

(Перенаправлено из Наборы символов )

Перфолента со словом «Arc.Ask3.Ru», закодированным в ASCII . Наличие и отсутствие отверстия соответствует 1 и 0 соответственно; например, «W» кодируется как «1010111».

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

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

История [ править ]

История кодов символов иллюстрирует растущую потребность в машинной передаче символьной информации на расстоянии с использованием когда-то новых электрических средств. Самые ранние коды были основаны на ручных и рукописных системах кодирования и шифрования, таких как шифр Бэкона , шрифт Брайля , международные морские сигнальные флаги и 4-значное кодирование китайских иероглифов для китайского телеграфного кода ( Ганс Шьеллеруп , 1869). С внедрением электрических и электромеханических технологий эти самые ранние коды были адаптированы к новым возможностям и ограничениям первых машин. Самый ранний хорошо известный код символов, передаваемый электрически, код Морзе , введенный в 1840-х годах, использовал систему из четырех «символов» (короткий сигнал, длинный сигнал, короткий пробел, длинный пробел) для генерации кодов переменной длины. Хотя в некоторых коммерческих целях код Морзе использовался с помощью оборудования, он часто использовался как ручной код, создаваемый вручную на телеграфном ключе и расшифровываемый на слух, и сохраняется в любительском радио. и авиационного использования. Большинство кодов имеют фиксированную длину каждого символа или последовательности кодов фиксированной длины переменной длины (например, Unicode ). [2]

Общие примеры систем кодирования символов включают код Морзе, код Бодо , американский стандартный код обмена информацией (ASCII) и Unicode. Unicode, четко определенная и расширяемая система кодирования, вытеснила большинство более ранних кодировок символов, но путь развития кода до настоящего времени довольно хорошо известен.

Код Бодо, пятибитовая кодировка , был создан Эмилем Бодо в 1870 году, запатентован в 1874 году, модифицирован Дональдом Мюрреем в 1901 году и стандартизирован CCITT как Международный телеграфный алфавит № 2 (ITA2) в 1930 году. Название Бодо имеет был ошибочно применен к ITA2 и его многочисленным вариантам. ITA2 имел множество недостатков и часто улучшался многими производителями оборудования, что иногда создавало проблемы совместимости. В 1959 году военные США определили свой код Fielddata , шести- или семибитный код, введенный Корпусом связи армии США. Хотя Fielddata решала многие современные на тот момент проблемы (например, коды букв и цифр, организованные для машинной сортировки), она не достигла своих целей и просуществовала недолго. В 1963 году комитет ASCII (в который входил по крайней мере один член комитета Fielddata, В. Ф. Леубберт) выпустил первый код ASCII (X3.4-1963), который устранил большинство недостатков Fielddata, используя более простой код. Многие изменения были незначительными, например, сопоставление наборов символов в определенных числовых диапазонах. ASCII63 имел успех, широко был принят в промышленности, а с последующим выпуском кода ASCII 1967 года (в котором были добавлены строчные буквы и исправлены некоторые проблемы с «управляющим кодом») ASCII67 получил довольно широкое распространение. Американоцентричная природа ASCII67 была несколько рассмотрена в Европе. Стандарт ECMA-6 . [3]

Перфокарта Холлерита на 80 столбцов с набором символов EBCDIC

Герман Холлерит изобрел кодирование данных перфокарт в конце 19 века для анализа данных переписи населения. Первоначально каждое положение отверстия представляло собой отдельный элемент данных, но позже числовая информация была закодирована путем нумерации нижних строк от 0 до 9 с отметкой в ​​столбце, обозначающей номер строки. Позже алфавитные данные были закодированы, позволяя использовать более одного удара в столбце. Электромеханические счетные машины представляли внутреннюю дату по времени импульсов относительно движения карт через машину. Когда IBM перешла на электронную обработку, начиная с электронного умножителя IBM 603 , она использовала множество схем двоичного кодирования, привязанных к коду перфокарты.

IBM Двоично-десятичное число ( BCD ) — это шестибитная схема кодирования, используемая IBM еще в 1953 году в своей модели 702. [4] и компьютеры 704 , а также более поздние серии 7000 и 1400 , а также сопутствующие периферийные устройства. Поскольку использовавшийся тогда код перфокарты допускал только цифры, заглавные английские буквы и несколько специальных символов, шести бит было достаточно. BCD расширил существующую простую четырехбитную числовую кодировку, включив в нее алфавитные и специальные символы, легко сопоставив ее с кодировкой перфокарты, которая уже широко использовалась. Коды IBM использовались в основном с оборудованием IBM; другие производители компьютеров той эпохи имели свои собственные коды символов, часто шестибитные, но обычно имели возможность читать ленты, созданные на оборудовании IBM. BCD был предшественником расширенного двоично-десятичного кода обмена IBM (обычно сокращенно EBCDIC), восьмибитной схемы кодирования, разработанной в 1963 году для IBM System / 360 , которая имела больший набор символов, включая строчные буквы.

Пытаясь разработать универсально взаимозаменяемые кодировки символов, исследователи 1980-х годов столкнулись с дилеммой: с одной стороны, казалось необходимым добавить больше битов для размещения дополнительных символов, но с другой стороны, для пользователей относительно небольшого набора символов латинского алфавита (которые по-прежнему составляли большинство пользователей компьютеров), эти дополнительные биты были колоссальной тратой тогда скудных и дорогих вычислительных ресурсов (поскольку для таких пользователей они всегда были обнулены). среднего пользователя персонального компьютера В 1985 году жесткий диск мог хранить только около 10 мегабайт, а на оптовом рынке он стоил примерно 250 долларов США (и намного дороже, если покупать его отдельно в розницу). [5] поэтому в то время было очень важно учитывать каждый бит.

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

Терминология [ править ]

Неофициально термины «кодировка символов», «карта символов», «набор символов» и «кодовая страница» часто используются как синонимы. [6] Исторически сложилось так, что один и тот же стандарт определял набор символов и способ их кодирования в поток кодовых единиц — обычно с одним символом на кодовую единицу. Однако из-за появления более сложных кодировок символов различие между этими терминами стало важным.

  • Символ это минимальная единица текста, имеющая смысловое значение. [6] [7]
  • Набор символов — это набор элементов, используемых для представления текста. [6] [7] Например, латинский алфавит и греческий алфавит являются наборами символов.
  • Кодированный набор символов — это набор символов, сопоставленный с набором уникальных чисел. [7] По историческим причинам ее также часто называют кодовой страницей . [6]
  • Репертуар символов — это набор символов, которые могут быть представлены определенным набором кодированных символов. [7] [8] Репертуар может быть закрытым, что означает, что никакие дополнения не допускаются без создания нового стандарта (как в случае с ASCII и большей частью серии ISO-8859); Unicode и, в ограниченной степени, или он может быть открытым, допуская дополнения (как в случае с кодовыми страницами Windows ). [8]
  • Кодовая точка — это значение или позиция символа в кодированном наборе символов. [7]
  • Кодовое пространство — это диапазон числовых значений, охватываемый набором кодированных символов. [7] [9]
  • Единица кода — это минимальная комбинация битов, которая может представлять символ в кодировке символов (в терминах информатики это размер слова кодировки символов). [7] [9] Например, распространенные единицы кода включают 7-битные, 8-битные, 16-битные и 32-битные. В некоторых кодировках некоторые символы кодируются с использованием нескольких кодовых единиц; такое кодирование называется кодированием переменной ширины .

Кодовые страницы [ править ]

«Кодовая страница» — это историческое название набора кодированных символов.

Первоначально кодовая страница относилась к определенному номеру страницы в руководстве по стандартному набору символов IBM, который определял конкретную кодировку символов. [10] Другие поставщики, включая Microsoft , SAP и Oracle Corporation , также опубликовали свои собственные наборы кодовых страниц; наиболее известными наборами кодовых страниц являются « Windows » (на основе Windows-1252) и «IBM»/«DOS» (на основе кодовой страницы 437 ).

Несмотря на то, что в стандарте больше нет ссылок на конкретные номера страниц, многие кодировки символов по-прежнему обозначаются номером их кодовой страницы; аналогично, термин «кодовая страница» часто до сих пор используется для обозначения кодировок символов в целом.

Термин «кодовая страница» не используется в Unix или Linux, где предпочтение отдается «карте символов», обычно в более широком контексте локалей. Архитектура представления символьных данных IBM (CDRA) обозначает объекты с идентификаторами кодированного набора символов ( CCSID ), каждый из которых по-разному называется «набором символов», «набором символов», «кодовой страницей» или «CHARMAP». [9]

Кодовые единицы [ править ]

Размер кодовой единицы эквивалентен битовому измерению для конкретной кодировки:

  • Кодовая единица в US-ASCII состоит из 7 бит;
  • Кодовая единица в UTF-8 , EBCDIC и GB 18030 состоит из 8 бит;
  • Кодовая единица в UTF-16 состоит из 16 бит;
  • Кодовая единица в UTF-32 состоит из 32 битов.

Кодовые точки [ править ]

Кодовая точка представлена ​​последовательностью кодовых единиц. Отображение определяется кодировкой. Таким образом, количество кодовых единиц, необходимых для представления кодовой точки, зависит от кодировки:

  • UTF-8: кодовые точки отображаются в последовательность из одной, двух, трех или четырех единиц кода.
  • UTF-16: кодовые единицы в два раза длиннее 8-битных кодовых единиц. Следовательно, любая кодовая точка со скалярным значением меньше U+10000 кодируется одной кодовой единицей. Кодовые точки со значением U+10000 или выше требуют двух кодовых единиц каждая. Эти пары кодовых единиц имеют уникальный термин в UTF-16: «суррогатные пары Юникода».
  • UTF-32: 32-битная кодовая единица достаточно велика, чтобы каждая кодовая точка была представлена ​​как одна кодовая единица.
  • GB 18030: несколько кодовых единиц на одну кодовую точку являются обычным явлением из-за небольших кодовых единиц. Кодовые точки сопоставляются с одной, двумя или четырьмя кодовыми единицами. [11]

Персонажи [ править ]

То, что именно представляет собой символ, варьируется в зависимости от кодировки символов.

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

То, как именно обрабатывать варианты глифов, — это выбор, который необходимо сделать при построении конкретной кодировки символов. Некоторые системы письменности, такие как арабская и иврит, должны учитывать такие вещи, как графемы , которые в разных контекстах соединяются по-разному, но представляют один и тот же семантический характер.

Модель кодирования Unicode [ править ]

Юникод ISO/IEC 10646 и его параллельный стандарт, универсальный набор символов , вместе составляют единый стандарт кодировки символов. Вместо сопоставления символов непосредственно с байтами , Unicode отдельно определяет набор кодированных символов, который сопоставляет символы с уникальными натуральными числами ( кодовыми точками ), как эти кодовые точки сопоставляются с сериями натуральных чисел фиксированного размера (кодовыми единицами) и, наконец, как эти единицы кодируются как поток октетов (байтов). Целью этой декомпозиции является создание универсального набора символов, который можно закодировать различными способами. Чтобы точно описать эту модель, Unicode использует собственный набор терминологии для описания своего процесса: [9]

Репертуар абстрактных символов (ACR) — это полный набор абстрактных символов, поддерживаемых системой. Юникод имеет открытый репертуар, а это означает, что со временем в репертуар будут добавляться новые символы.

Набор кодированных символов (CCS) — это функция , которая сопоставляет символы с кодовыми точками (каждая кодовая точка представляет один символ). Например, в данном репертуаре заглавная буква «А» латинского алфавита может быть представлена ​​кодовой точкой 65, символ «В» — 66 и так далее. Несколько наборов кодированных символов могут использовать один и тот же набор символов; например, кодовые страницы ISO/IEC 8859-1 и IBM 037 и 500 охватывают один и тот же репертуар, но сопоставляют их с разными кодовыми точками.

Форма кодирования символов (CEF) — это преобразование кодовых точек в кодовые единицы для облегчения хранения в системе, которая представляет числа в виде битовых последовательностей фиксированной длины (т. е. практически в любой компьютерной системе). Например, система, которая хранит числовую информацию в 16-битных единицах, может напрямую представлять только кодовые точки от 0 до 65 535 в каждой единице, но более крупные кодовые точки (скажем, от 65 536 до 1,4 миллиона) могут быть представлены с использованием нескольких 16-битных единиц. Это соответствие определяется CEF.

Схема кодирования символов (CES) — это преобразование кодовых единиц в последовательность октетов для облегчения хранения в файловой системе на основе октетов или передачи по сети на основе октетов. Простые схемы кодировки символов включают UTF-8 , UTF-16BE , UTF-32BE , UTF-16LE и UTF-32LE ; схемы кодирования составных символов, такие как UTF-16 , UTF-32 и ISO/IEC 2022 , переключаются между несколькими простыми схемами с помощью знака порядка байтов или escape-последовательностей ; схемы сжатия пытаются минимизировать количество байтов, используемых на единицу кода (например, SCSU и BOCU ).

Хотя UTF-32BE и UTF-32LE являются более простыми CES, большинство систем, работающих с Unicode, используют либо UTF-8 , который обратно совместим с ASCII фиксированной длины и отображает кодовые точки Unicode в последовательности октетов переменной длины, либо UTF-16BE . [ нужна ссылка ] который обратно совместим с UCS-2BE фиксированной длины и отображает кодовые точки Unicode в последовательности 16-битных слов переменной длины. см . в сравнении кодировок Unicode Подробное обсуждение .

Наконец, может существовать протокол более высокого уровня , который предоставляет дополнительную информацию для выбора конкретного варианта символа Юникода , особенно если существуют региональные варианты, которые были «унифицированы» в Юникоде как один и тот же символ. Примером может служить атрибут XML xml:lang.

Модель Unicode использует термин «карта символов» для других систем, которые напрямую присваивают последовательность символов последовательности байтов, охватывая все уровни CCS, CEF и CES. [9]

Кодовые точки Юникода [ править ]

В Юникоде символ может называться «U+», за которым следует его кодовое значение в шестнадцатеричном формате. Диапазон допустимых кодовых точек (кодовое пространство) для стандарта Unicode составляет от U+0000 до U+10FFFF включительно, разделен на 17 плоскостей , обозначенных числами от 0 до 16. Символы в диапазоне от U+0000 до U+FFFF являются в плоскости 0, называемой базовой многоязычной плоскостью (BMP). Этот самолет содержит наиболее часто используемые символы. Символы в диапазоне от U+10000 до U+10FFFF в других плоскостях называются дополнительными символами .

В следующей таблице показаны примеры значений кодовых точек:

Характер Кодовая точка Юникода Глиф
латынь А U + 0041 А
Латинский диез S U + 00DF SS
Он за Восток U+6771 Восток
Амперсанд U + 0026 &
Перевернутый восклицательный знак U + 00A1 ¡
Знак раздела U + 00A7 §

Пример [ править ]

Рассмотрим строку букв «ab̲c𐐀», то есть строку, содержащую объединяющий символ Юникода ( U+0332 ̲ КОМБИНИРОВАНИЕ НИЗКОЙ ЛИНИИ ), а также дополнительный символ ( U+10400 𐐀 ДЕСЕРЕТ ЗАГЛАВНАЯ БУКВА I ). Эта строка имеет несколько представлений в Юникоде, которые логически эквивалентны, но каждое из них подходит для различных обстоятельств или ряда требований:

  • Четыре составленных персонажа :
    a, , c, 𐐀
  • Пять графем :
    a, b, _, c, 𐐀
  • Пять кодовых точек Unicode :
    U+0061, U+0062, U+0332, U+0063, U+10400
  • Пять кодовых единиц UTF-32 (32-битные целочисленные значения):
    0x00000061, 0x00000062, 0x00000332, 0x00000063, 0x00010400
  • Шесть кодовых единиц UTF-16 (16-битные целые числа)
    0x0061, 0x0062, 0x0332, 0x0063, 0xD801, 0xDC00
  • Девять кодовых единиц UTF-8 (8-битные значения или байты ).
    0x61, 0x62, 0xCC, 0xB2, 0x63, 0xF0, 0x90, 0x90, 0x80

Обратите внимание, в частности, что 𐐀 представлен либо одним 32-битным значением (UTF-32), двумя 16-битными значениями (UTF-16) или четырьмя 8-битными значениями (UTF-8). Хотя каждая из этих форм использует одинаковое общее количество битов (32) для представления глифа, неясно, как связаны фактические числовые значения байтов.

Транскодирование [ править ]

В результате использования множества методов кодирования символов (и необходимости обратной совместимости с архивными данными) было разработано множество компьютерных программ для перевода данных между схемами кодирования символов - процесс, известный как транскодирование . Некоторые из них приведены ниже.

Кроссплатформенность :

  • Веб-браузеры . Большинство современных веб-браузеров имеют функцию автоматического определения кодировки символов . Например, в Firefox 3 см. подменю «Вид/Кодировка символов».
  • iconv — программа и стандартизированный API для преобразования кодировок
  • luit — программа, которая преобразует кодировку ввода и вывода в программы, работающие в интерактивном режиме.
  • Международные компоненты для Unicode — набор библиотек C и Java для преобразования кодировок. uconv можно использовать из ICU4C.

Окна :

  • Encoding.Convert – .NET API [12]
  • MultiByteToWideChar/WideCharToMultiByte — для преобразования из ANSI в Unicode и из Unicode в ANSI. [13] [14]

См. также [ править ]

Общие кодировки символов [ править ]

Ссылки [ править ]

  1. ^ «Определение кодировки символов» . Словарь технических терминов . 24 сентября 2010 г.
  2. ^ Том Хендерсон (17 апреля 2014 г.). «Таблицы кодов символов древних компьютеров – и почему они все еще актуальны» . Умный медведь . Проверено 29 апреля 2014 г.
  3. ^ Том Дженнингс (1 марта 2010 г.). «Аннотированная история некоторых кодов символов» . Проверено 1 ноября 2018 г.
  4. ^ «Предварительное информационное руководство по электронным машинам обработки данных IBM типа 702» (PDF) . 1954. с. 80. 22-6173-1. Архивировано (PDF) из оригинала 9 октября 2022 года.
  5. ^ Стрелхо, Кевин (15 апреля 1985 г.). «IBM переводит жесткие диски на новые стандарты» . Инфомир . Popular Computing Inc., стр. 29–33 . Проверено 10 ноября 2020 г.
  6. Перейти обратно: Перейти обратно: а б с д Шон Стил (15 марта 2005 г.). «В чем разница между кодировкой, кодовой страницей, набором символов и Юникодом?» . Документы Майкрософт .
  7. Перейти обратно: Перейти обратно: а б с д и ж г «Глоссарий терминов Юникода» . Консорциум Юникод.
  8. Перейти обратно: Перейти обратно: а б «Глава 3: Соответствие». Стандарт Unicode версии 15.0 – Основная спецификация (PDF) . Консорциум Юникод. Сентябрь 2022 г. ISBN  978-1-936213-32-0 .
  9. Перейти обратно: Перейти обратно: а б с д и Уистлер, Кен; Фрейтаг, Асмус (11 ноября 2022 г.). «UTR № 17: Модель кодировки символов Юникода» . Консорциум Юникод . Проверено 12 августа 2023 г.
  10. ^ «Информация о программаторе видеотерминала VT510» . Корпорация цифрового оборудования (DEC). 7.1. Наборы символов — Обзор. Архивировано из оригинала 26 января 2016 года . Проверено 15 февраля 2017 г. . В дополнение к традиционным наборам символов DEC и ISO , которые соответствуют структуре и правилам ISO 2022 , VT510 поддерживает ряд кодовых страниц IBM PC ( номера страниц в руководстве по стандартному набору символов IBM) в режиме PCTerm для эмуляции терминала консольного ПК отраслевого стандарта.
  11. ^ «Терминология (Уроки Java)» . Оракул . Проверено 25 марта 2018 г.
  12. ^ «Метод Encoding.Convert» . Библиотека классов Microsoft .NET Framework .
  13. ^ «Функция MultiByteToWideChar (stringapiset.h)» . Документы Майкрософт . 13 октября 2021 г.
  14. ^ «Функция WideCharToMultiByte (stringapiset.h)» . Документы Майкрософт . 9 августа 2022 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 25dc5d3413d584a001b0026befe74590__1716579480
URL1:https://arc.ask3.ru/arc/aa/25/90/25dc5d3413d584a001b0026befe74590.html
Заголовок, (Title) документа по адресу, URL1:
Character encoding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)