Сколько бит памяти требуется для кодирования одного символа в Unicode

Обновлено: 01.07.2024

Целевая аудитория: авторы контента, пользователи и все, кто не знает, что такое кодировка символов, и хочет получить краткую информацию о том, как она на них влияет.

Вопрос

Что такое кодировка символов и зачем мне это?

Ответить

Во-первых, какое мне дело?

Если вы используете какой-либо другой текст, кроме самого простого английского текста, люди могут не прочитать созданный вами контент, пока вы не скажете, какую кодировку символов вы использовали.

Например, вы можете сделать так, чтобы текст выглядел так:

но на самом деле это может выглядеть так:

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

Так что же такое кодировка символов?

Слова и предложения в тексте создаются из файлов . Примеры символов включают латинскую букву á, китайскую иероглифику 請 или иероглиф деванагари ह .

Возможно, вы не сможете увидеть некоторые символы на этой странице, потому что у вас нет необходимых шрифтов. Если вы нажмете на то место, где вы ожидали увидеть символ, вы перейдете к графической версии. Эта страница закодирована в UTF-8.

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

Символы хранятся в компьютере как один или несколько .

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

Этот вводящий в заблуждение термин часто используется для обозначения того, что на самом деле является кодировкой символов. Вы должны знать об этом использовании, но по возможности придерживайтесь термина кодировки символов.

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

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

Однако в большинстве случаев вам не нужно знать подробности. Вам просто нужно быть уверенным, что вы прислушаетесь к советам в разделе Как это на меня повлияет? ниже.

Как в это вписываются шрифты?

A — это набор определений глифов, т.е. определения фигур, используемых для отображения символов.

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

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

Как это влияет на меня?

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

Авторам контента необходимо выяснить, как объявить кодировку символов, используемую для формата документа, с которым они работают.

Обратите внимание, что простое объявление другой кодировки на вашей странице не изменит байты; вам также нужно сохранить текст в этой кодировке.

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

По приведенным ниже ссылкам можно найти дополнительную информацию по этим темам.

Дополнительная информация

В этом разделе содержится небольшая дополнительная информация о сопоставлении между байтами, кодовыми точками и символами для тех, кому это интересно. Не стесняйтесь просто перейти к разделу «Дополнительная литература».

Обратите внимание, что числа кодовых точек обычно выражаются в шестнадцатеричной системе счисления, т.е. основание 16. Например, 233 в шестнадцатеричной форме равно E9. Значения кодовой точки Unicode обычно записываются в форме U+00E9.

В наборе кодированных символов ISO 8859-1 (также известном как Latin1) значение десятичного кода для буквы é равно 233. Однако в ISO 8859-5 та же самая кодовая точка представляет кириллический символ щ .

Эти наборы символов содержат менее 256 символов и напрямую сопоставляют кодовые точки со значениями байтов, поэтому кодовая точка со значением 233 представлена ​​одним байтом со значением 233. Обратите внимание, что только контекст определяет, будет ли этот байт представляет либо é, либо sch .

Есть и другие способы обработки символов из ряда сценариев. Например, с помощью набора символов Unicode вы можете представлять оба символа в одном наборе. На самом деле Unicode содержит в одном наборе, вероятно, все символы, которые вам когда-либо понадобятся. В то время как буква é по-прежнему представлена ​​кодовой точкой 233, кириллический символ щ теперь имеет кодовую точку 1097.

В наши дни байты обычно состоят из 8 бит. Существует только 2 8 (т.е. 256) уникальных способов объединения 8 битов.

С другой стороны, 1097 — слишком большое число, чтобы его можно было представить одним байтом*. Итак, если вы используете кодировку символов для текста Unicode, называемую UTF-8, щ будет представлена ​​двумя байтами. Однако значение кодовой точки получается не просто из значения двух соединенных вместе байтов — требуется более сложное декодирование.

Другие символы Юникода соответствуют одному, трем или четырем байтам в кодировке UTF-8.

Кроме того, обратите внимание, что буква é также представлена ​​двумя байтами в UTF-8, а не одним байтом, который используется в ISO 8859-1. (Только символы ASCII кодируются одним байтом в UTF-8.)

UTF-8 — это наиболее широко используемый способ представления текста Unicode на веб-страницах, и вы всегда должны использовать UTF-8 при создании своих веб-страниц и баз данных. Но, в принципе, UTF-8 — это лишь один из возможных способов кодировки символов Юникода. Другими словами, одна кодовая точка в наборе символов Unicode может фактически отображаться в различные последовательности байтов, в зависимости от того, какая кодировка использовалась для документа. Кодовые точки Unicode могут быть сопоставлены с байтами с использованием любой из кодировок, называемых UTF-8, UTF-16 или UTF-32. Символ деванагари क с кодовой точкой 2325 (что равно 915 в шестнадцатеричной записи) будет представлен двумя байтами при использовании кодировки UTF-16 (09 15), тремя байтами при использовании UTF-8 (E0 A4 95) или четырьмя байтами. байт с кодировкой UTF-32 (00 00 09 15).

Могут быть дополнительные сложности помимо описанных в этом разделе (например, порядок байтов и escape-последовательности), но описанные здесь подробности показывают, почему важно, чтобы приложение, с которым вы работаете, знало, какая кодировка символов подходит для ваших данных. , и знает, как обращаться с этой кодировкой.

Дополнительная литература

Начинаете? Введение в наборы символов и кодировки — указывает на другие документы W3C, связанные с наборами символов и кодировками

Учебник, Работа с кодировками символов в HTML и CSS. Советы по выбору кодировки, ее объявлению и другим темам, связанным с HTML и CSS.

Настройка кодировки в веб-приложениях для разработки — как заставить ваш редактор сохранять в другой кодировке список сред редактирования.

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

ASCII — базовая кодировка текста для латиницы

Традиционно для кодирования одного символа используется количество информации, равное 1 байту, то есть I = 1 байт = 8 бит.

Для кодирования одного символа требуется 1 байт информации. Если рассматривать символы как возможные события, то можно подсчитать, сколько различных символов можно закодировать: N = 2I = 28 = 256.

Такого количества символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавитов, цифры, знаки, графические символы и т.п. двоичный код от 00000000 до 11111111.

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

Пользователь нажимает клавишу с символом на клавиатуре, и на компьютер отправляется определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера, где занимает один байт.В процессе отображения символа на экране компьютера выполняется обратный процесс - декодирование, то есть преобразование кода символа в его образ. Кодовая таблица ASCII (американский стандартный код для обмена информацией) была принята в качестве международного стандарта. Стандартная таблица частей ASCII Важно, чтобы присвоение определенного кода символу было предметом соглашения, которое фиксируется в таблице кодов. Первые 33 кода (от 0 до 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и так далее). Коды с 33 по 127 являются международными и соответствуют символам латинского алфавита, цифрам, арифметическим знакам и знакам препинания. Коды от 128 до 255 являются национальными, то есть одному и тому же коду в национальных кодировках соответствуют разные символы.

К сожалению, в настоящее время существует пять различных кодовых таблиц для русских букв (KOI8, CP1251, CP866, Mac, ISO), поэтому тексты, созданные в одной кодировке, будут некорректно отображаться в другой.

В настоящее время действует новый международный стандарт Unicode, который выделяет на каждый символ не один байт, а два, поэтому с его помощью можно кодировать не 256 символов, а N = 216 = 65536 разных

Юникод — появление универсальной кодировки текста (UTF 32, UTF 16 и UTF 8)

Эти тысячи символов из языковой группы Юго-Восточной Азии не могли быть описаны в одном байте информации, который был выделен для кодирования символов в расширенных кодировках ASCII. В результате был создан консорциум под названием Юникод (Unicode — Unicode Consortium) при сотрудничестве многих лидеров ИТ-индустрии (тех, кто производит программное обеспечение, кто кодирует оборудование, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.

Первой текстовой кодировкой, опубликованной под эгидой консорциума Unicode, была кодировка UTF 32. Число в названии кодировки UTF 32 означает количество битов, которые используются для кодирования одного символа. 32 бита — это 4 байта информации, которые потребуются для кодирования одного символа в новой универсальной кодировке UTF 32.

В результате один и тот же файл с текстом, закодированным в расширенной кодировке ASCII и в кодировке UTF 32, в последнем случае будет иметь размер (вес) в четыре раза больше. Это плохо, но теперь у нас есть возможность закодировать с помощью UTF 32 количество символов, равное двум в тридцатой степени (миллиарды символов, которые покроют любое действительно необходимое значение с колоссальным запасом).

А вот многим странам с языками европейской группы вообще не нужно было использовать такое огромное количество символов в кодировке, однако при использовании UTF 32 они даром получили четырехкратное увеличение веса. текстовых документов и, как следствие, увеличение объема интернет-трафика и объема хранимых данных. Это очень много и никто не мог себе позволить такую ​​растрату.

В результате разработки универсальной кодировки Unicode появилась UTF 16, которая оказалась настолько удачной, что была принята по умолчанию в качестве базового пространства для всех используемых нами символов. UTF 16 использует два байта для кодирования одного символа. Например, в операционной системе Windows можно пройти по пути Пуск — Программы — Стандартные — Служебные — Таблица символов.

В результате откроется таблица с векторными формами всех шрифтов, установленных в вашей системе. Если вы выберете набор символов Unicode в дополнительных параметрах, вы сможете увидеть для каждого шрифта отдельно весь ассортимент входящих в него символов. Кстати, нажав на любой из этих символов, можно увидеть его двухбайтный код в кодировке UTF 16, состоящий из четырех шестнадцатеричных цифр:


Сколько символов можно закодировать в кодировке UTF 16 с помощью 16 бит? 65 536 символов (два в степени шестнадцати) были приняты в качестве базового пространства в Unicode. Кроме того, существуют способы кодирования с помощью UTF 16 около двух миллионов символов, но они ограничены расширенным пространством в миллион символов текста.

Но даже удачная версия кодировки Unicode под названием UTF 16 не принесла особого удовлетворения тем, кто писал, например, программы только на английском языке, поскольку после перехода с расширенной версии кодировки ASCII на UTF 16, удвоился вес документов (один байт на один символ в ASCII и два байта на один и тот же символ в кодировке UTF 16). Именно для удовлетворения всех и каждого в консорциуме Unicode было решено придумать кодировку текста переменной длины.

Эта кодировка в Юникоде называлась UTF 8. Несмотря на восьмерку в названии, UTF 8 является полноценной кодировкой переменной длины, т.е. каждый символ текста можно закодировать в последовательность длиной от одного до шести байт.На практике в UTF 8 используется только диапазон от одного до четырех байт, т.к. дальше четырех байт кода ничего даже теоретически представить невозможно.

В UTF 8 все латинские символы кодируются одним байтом, как и в старой кодировке ASCII. Что примечательно, в случае кодирования только латиницей, даже те программы, которые не понимают Юникод, все равно будут читать то, что закодировано в UTF 8. То есть базовая часть кодировки ASCII перекочевала в UTF 8.

Кириллические символы в UTF 8 кодируются двумя байтами, а, например, грузинские - тремя байтами. Консорциум Unicode после создания кодировок UTF 16 и UTF 8 решил основную проблему — теперь у нас в шрифтах единое кодовое пространство. Производителям шрифтов остается только заполнить это кодовое пространство векторными формами текстовых символов, исходя из их сильных сторон и возможностей.

Теоретически решение этих проблем уже давно существует. Он называется Unicode Unicode. Это таблица кодирования, в которой для кодирования каждого символа используются 2 байта, т.е. 16 бит. На основе такой таблицы можно закодировать N = 2 16 = 65 536 символов.

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

Для академических целей было добавлено множество исторических шрифтов, в том числе древнегреческие, египетские иероглифы, клинопись, письмо майя, этрусский алфавит.

Юникод предоставляет широкий спектр математических и музыкальных символов и пиктограмм.

Для символов кириллицы в Unicode существует два диапазона кодов:

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

В закодированном английском тексте используется только 26 букв латинского алфавита и еще 6 знаков препинания. В этом случае текст, содержащий 1000 символов, можно гарантированно сжать без потери информации до размера:

Словарь Эллочки - "каннибалы" (персонаж романа "Двенадцать стульев") - 30 слов. Сколько бит хватит, чтобы закодировать весь словарный запас Эллочки? Варианты: 8, 5, 3, 1.

Единицы измерения объема данных и емкости памяти: килобайты, мегабайты, гигабайты.

Итак, мы выяснили, что в большинстве современных кодировок для хранения одного символа текста на электронном носителе выделяется 1 байт. Те. в байтах измеряется объем (V), занимаемый данными при их хранении и передаче (файлы, сообщения).

Объем данных (V) - количество байтов, необходимое для их хранения в памяти электронного носителя информации.

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

Однако байт — это маленькая единица измерения объема данных, более крупные — это килобайты, мегабайты, гигабайты, терабайты.

Следует помнить, что префиксы "кило", "мега", "гига" . не являются десятичными в этом случае. Так что «кило» в слове «килобайт» не означает «тысяча», т.е. не означает «10 3». Бит — это двоичная единица, и по этой причине в информатике удобно использовать единицы измерения, кратные числу «2», а не числу «10».

1 байт = 2 3 = 8 бит, 1 килобайт = 2 10 = 1024 байт. В двоичном формате 1 килобайт = & 1 000 000 000 байт.

Общие вопросы, касающиеся UTF или форм кодировки

Часто задаваемые вопросы по UTF-8

Часто задаваемые вопросы по UTF-16

Часто задаваемые вопросы по UTF-32

Часто задаваемые вопросы о метке порядка байтов (BOM)

Общие вопросы, касающиеся UTF или формы кодировки

< th>Самая большая кодовая точка
Имя UTF-8 UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE
Наименьшая кодовая точка 0000 0000 0000 0000< /td> 0000 0000 0000
10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF
Размер блока кода 8 бит 16 бит 16 бит 16 бит 32 бита 32 бита 32 бита
Порядок байтов Н/Д обратный порядок байтов li ttle-endian big-endian little-endian
Наименьшее количество байтов на символ 1 2 2 2 4 4 4
Большинство байтов на символ 4 4 4< /td> 4 4 4 4

Часто задаваемые вопросы по UTF-8

Часто задаваемые вопросы по UTF-16

Вопрос. Что такое UTF-16?

О. В UTF-16 используется одна 16-битная кодовая единица для кодирования наиболее распространенных 63 000 символов и пара 16-битных кодовых единиц, называемых суррогаты, чтобы кодировать 1 миллион менее часто используемых символов в Unicode.

Первоначально Unicode был разработан как чистая 16-битная кодировка, предназначенная для представления всех современных сценариев. (Древние сценарии должны были быть представлены символами для частного использования.) Со временем, особенно после добавления более 14 500 составных символов для совместимости с устаревшими наборами, стало ясно, что 16-битных недостаточно для пользовательского сообщества. Из этого возник UTF-16. [AF]

В: Что такое суррогаты?

О: Суррогаты — это кодовые точки из двух специальных диапазонов значений Unicode, зарезервированные для использования в качестве начальных и конечных значений парного кода. единицы в UTF-16. Ведущие, также называемые старшими, суррогаты — от D80016 до DBFF16, а замыкающие, или нижние, суррогаты — от DC0016 до DFFF< под>16. Их называют суррогатными, так как они не представляют символы напрямую, а только как пару.

В: Каков алгоритм преобразования из UTF-16 в коды символов?

О: Стандарт Unicode раньше содержал короткий алгоритм, теперь есть только таблица распределения битов. Вот три коротких фрагмента кода, которые переводят информацию из таблицы распределения битов в код C, который будет преобразовываться в UTF-16 и обратно.

Используя следующие определения типов

первый фрагмент вычисляет старший (или ведущий) суррогат по коду символа C.

где X, U и W соответствуют меткам, используемым в таблице 3-5 Распределение битов UTF-16. Следующий фрагмент делает то же самое для младшего суррогата.

Наконец, обратная сторона, где hi и lo — старший и младший заместители, а C — результирующий символ

Я немного запутался в кодировках. Насколько я знаю, старые символы ASCII занимали один байт на символ. Сколько байтов требуется для символа Unicode?

Я предполагаю, что один символ Unicode может содержать все возможные символы любого языка. Я прав? Итак, сколько байтов нужно на символ?

А что означают UTF-7, UTF-6, UTF-16 и т. д.? Это разные версии Unicode?

Я прочитал статью в Википедии о Unicode, но для меня это довольно сложно. Я с нетерпением жду простого ответа.

Извините, простого ответа нет. Я нахожу все это немного беспорядком. Утверждалось, что Unicode использует два байта и может представлять все символы, но оказалось, что двух байтов недостаточно.

"Простой ответ": символ Юникода занимает 1-4 байта. Юникод охватывает множество языков, но не все. В прошлый раз, когда я смотрел, например, клингон не был официальным набором символов Unicode.

Клингон не является частью самого стандарта Unicode, нет. Вместо этого используется зона частного использования Uniode (U+F8D0 - U+F8FF).

Спасибо, вопрос - спасибо. Моя ситуация заключается в хранении данных через LMS, совместимые со SCORM 1.2. стандарт для SCORM 1.2 'cmi.suspend_data' составляет 4096 байт данных, что, по предположению предыдущего разработчика, означает, что мы можем хранить 4096 символов. О, чувак, он ошибался - я только что обнаружил, почему наши закладки не работают на длинных курсах. Итак, теперь я знаю, что поскольку мы используем UTF-8, для каждого символа требуется 4 байта, что дает нам 1024 символа.

12 ответов 12

Как ни странно, никто не указал, как рассчитать, сколько байт занимает один символ Unicode. Вот правило для строк в кодировке UTF-8:

Итак, быстрый ответ: он занимает от 1 до 4 байтов, в зависимости от первого, который указывает, сколько байтов он займет.

Большое спасибо! Я просто просматривал стандарт IETF и ничего не нашел о кодировании, а в статье, которую я читал, не было достаточно подробностей, чтобы сказать, сколько битов используется для представления количества завершающего кода. баллов за "символ".

Теперь это находится на второй странице моей шпаргалки "Введение для новых членов команды" вместе с первыми двумя забавными комментариями

0xF4 был не ошибкой, а уточнением. Кодовые точки Unicode находятся в диапазоне 0–0x10ffff, поэтому последняя кодовая точка кодируется как F4 8F BF BF.

@DJPJ В принципе вы правы, но UTF-8 не использует все доступное пространство для совместимости с UTF-16.

Вы не увидите простого ответа, потому что его нет.

Во-первых, Unicode не содержит "каждый символ из каждого языка", хотя и пытается это сделать.

Юникод сам по себе является отображением, он определяет кодовые точки, а кодовая точка — это число, связанное обычно с символом. Я говорю обычно, потому что есть такие понятия, как объединение символов. Возможно, вы знакомы с такими вещами, как акценты или умлауты. Их можно использовать с другим символом, таким как a или u, для создания нового логического символа. Таким образом, символ может состоять из 1 или более кодовых точек.

Чтобы быть полезными в вычислительных системах, нам нужно выбрать представление для этой информации. Это различные кодировки Unicode, такие как utf-8, utf-16le, utf-32 и т. д. Они отличаются в основном размером своих кодовых единиц. UTF-32 — самая простая кодировка, она имеет 32-битную кодовую единицу, что означает, что отдельная кодовая точка удобно вписывается в кодовую единицу. В других кодировках будут ситуации, когда для кодовой точки потребуется несколько кодовых единиц, или эта конкретная кодовая точка вообще не может быть представлена ​​в кодировке (это проблема, например, с UCS-2).

Из-за гибкости комбинирования символов даже в пределах данной кодировки количество байтов на символ может варьироваться в зависимости от символа и формы нормализации. Это протокол для работы с символами, которые имеют более одного представления (вы можете сказать «a» с акцентом, который представляет собой 2 кодовых точки, одна из которых является комбинацией символов или «a» с ударением, которая является одной кодовой точкой). ).

Стандарт Unicode — это универсальный стандарт кодирования символов, используемый для представления текста для компьютерной обработки. Версии стандарта Unicode полностью совместимы и синхронизированы с соответствующими версиями международного стандарта ISO/IEC 10646. Стандарт Unicode предоставляет дополнительную информацию о символах и их использовании. Любая реализация, совместимая с Unicode, также совместима с ISO/IEC 10646.

Стандарт Unicode обеспечивает согласованный способ кодирования многоязычного открытого текста и упорядочивает хаотичное положение вещей, которое затрудняет его распознавание. обмениваться текстовыми файлами на международном уровне. Пользователи компьютеров, имеющие дело с многоязычным текстом, — деловые люди, лингвисты, исследователи, ученые и другие — обнаружат, что стандарт Unicode значительно упрощает их работу. Математики и технические специалисты, которые регулярно используют математические символы и другие технические символы, также найдут ценность в стандарте Unicode.

Дизайн Unicode основан на простоте и согласованности ASCII, но выходит далеко за рамки ограниченных возможностей ASCII. кодировать только латинский алфавит. Стандарт Unicode обеспечивает возможность кодирования всех символов, используемых в письменных языках мира. Чтобы кодирование символов было простым и эффективным, стандарт Unicode присваивает каждому символу уникальное числовое значение и имя.

Стандарт Unicode и ISO/IEC 10646 поддерживают три формы кодирования (UTF-8, UTF-16, UTF). -32), которые используют общий репертуар персонажей. Эти формы кодирования позволяют кодировать до миллиона символов. Этого достаточно для всех известных требований к кодировке символов, включая полное покрытие всех исторических письменностей мира, а также общепринятых систем записи.

Какие символы включает стандарт Unicode?

Стандарт Unicode определяет коды для символов, используемых во всех основных современных языках. Шрифты включают европейские алфавитные шрифты, ближневосточные шрифты с письмом справа налево и многие алфавиты Азии.

Стандарт Unicode также включает знаки препинания, диакритические знаки, математические символы, технические символы, стрелки, дингбаты, смайлики. и т. д. Он предоставляет коды для диакритических знаков, которые изменяют знаки символов, такие как тильда (~), которые используются в сочетании с базовыми символами для обозначения букв с ударением (например, ñ).В целом стандарт Unicode предоставляет коды для более чем 135 000 символов мировых алфавитов, других систем письма и наборов символов.

Большинство общеупотребительных символов помещаются в первые 64 000 кодовых точек, т.е. область кодового пространства, которая называется базовой многоязычной плоскостью, или сокращенно BMP. Есть четырнадцать других дополнительных плоскостей, доступных для будущего кодирования других символов, с более чем 800 000 неиспользуемых кодовых точек. Дополнительные символы рассматриваются для добавления в будущие версии стандарта.

Стандарт Unicode также резервирует кодовые точки для частного использования. Поставщики или конечные пользователи могут назначать их внутри для своих собственных знаков и символов или использовать их со специализированными шрифтами. В BMP есть 6400 кодовых точек для частного использования и еще 131 068 дополнительных кодовых точек для частного использования, если 6400 недостаточно для конкретных приложений.

Кодирование форм

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

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

UTF-8 популярен для HTML и подобных протоколов. UTF-8 — это способ преобразования всех символов Unicode в кодировку байтов переменной длины. Его преимущества заключаются в том, что символы Unicode, соответствующие знакомому набору ASCII, имеют те же значения байтов, что и ASCII, и что символы Unicode, преобразованные в UTF-8, могут использоваться с большей частью существующего программного обеспечения без обширной перезаписи программного обеспечения.

UTF-16 популярен во многих средах, где необходимо сбалансировать эффективный доступ к символам с экономичным использованием памяти. Он достаточно компактен, и все часто используемые символы помещаются в одну 16-битную кодовую единицу, в то время как все остальные символы доступны через пары 16-битных кодовых единиц.

UTF-32 полезен там, где недостаточно памяти. не беспокоит, но желателен доступ к символам с фиксированной шириной и единым кодом. Каждый символ Unicode кодируется в одной 32-битной кодовой единице при использовании UTF-32.

Всем трем формам кодировки требуется не более 4 байтов (или 32-бит) данных для каждого символа.

Определение элементов текста

Письменные языки представлены текстовыми элементами, которые используются для создания слов и предложений. Эти элементы могут быть такими буквами, как «w» или «M»; символы, подобные тем, которые используются в японской хирагане для обозначения слогов; или идеограммы, подобные тем, которые используются в китайском языке для представления полных слов или понятий.

Определение текстовых элементов часто меняется в зависимости от процесса обработки текста. Например, в исторической сортировке испанского языка «ll»; считается одним текстовым элементом. Однако при вводе испанских слов "ll" представляет собой два отдельных текстовых элемента: "l" и "l".

Чтобы не решать, что является текстовым элементом, а что нет, в разных процессах стандарт Unicode определяет элементы кода (обычно называемые «символами»). Элемент кода является фундаментальным и полезным для компьютерной обработки текста. По большей части элементы кода соответствуют наиболее часто используемым элементам текста. В случае испанской буквы «ll» стандарт Unicode определяет каждую букву «l» как отдельный элемент кода. Задача объединения двух букв "l" вместе для сортировки по алфавиту возложена на программное обеспечение, обрабатывающее текст.

Обработка текста

Компьютерная обработка текста включает обработку и кодирование. Рассмотрим, например, пользователя текстового процессора, печатающего текст на клавиатуре. Системное программное обеспечение компьютера получает сообщение о том, что пользователь нажал комбинацию клавиш «T», которая кодируется как U+0054. Текстовый процессор сохраняет число в памяти, а также передает его программному обеспечению дисплея, отвечающему за вывод символа на экран. Программное обеспечение дисплея, которое может быть оконным менеджером или частью самого текстового процессора, использует число в качестве индекса для поиска изображения буквы «Т», которое оно рисует на экране монитора. Процесс продолжается по мере того, как пользователь вводит новые символы.

Стандарт Unicode напрямую касается только кодировки и семантики текста. Он не относится к другим действиям, выполняемым над текстом. Например, текстовый процессор может проверять ввод машинистки по мере ввода и отображать орфографические ошибки волнистым подчеркиванием. Или он может вставлять разрывы строк, когда подсчитывает определенное количество символов, введенных с момента последнего разрыва строки.Важным принципом стандарта Unicode является то, что он не указывает, как выполнять эти процессы, если кодирование и декодирование символов выполняется правильно.

Интерпретация символов и визуализация глифов

Разница между определением точки кода и ее отображением на экране или бумаге имеет решающее значение для понимания роли стандарта Unicode в обработке текста. Символ, определяемый кодовой точкой Unicode, является абстрактным объектом, таким как «ЛАТИНСКИЙ СИМВОЛ ЗАГЛАВНАЯ А» или «БЕНГАЛЬСКАЯ ЦИФРА 5». Знак, сделанный на экране или бумаге, называемый глифом, является визуальным представлением символа.

Стандарт Unicode не определяет изображения глифа. Стандарт определяет, как интерпретируются символы, а не как отображаются глифы. Программный или аппаратный механизм рендеринга компьютера отвечает за внешний вид символов на экране. Стандарт Unicode не определяет размер, форму и стиль экранных символов.

Последовательности символов

Принципы стандарта Unicode

  • Универсальный репертуар
  • Логический порядок
  • Эффективность
  • Объединение
  • Символы, а не глифы
  • Динамическая композиция
  • Семантика
  • Стабильность
  • Обычный текст
  • Конвертируемость

Наборы символов многих существующих международных, национальных и корпоративных стандартов включены в стандарт Unicode. Например, его первые 256 символов взяты из широко используемого набора символов Latin-1.

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

Стандарт Unicode определяет алгоритм представления текста с двунаправленным поведением, например, арабский и английский. Символы хранятся в логическом порядке. Стандарт Unicode включает символы для указания изменения направления при смешивании сценариев разной направленности. Для всех скриптов текст Unicode находится в логическом порядке в представлении памяти, соответствующем порядку, в котором текст набирается на клавиатуре.

Назначение кодов символов

Каждому элементу кода, определяемому стандартом Unicode, присваивается один номер. Каждое из этих чисел называется кодовой точкой и при упоминании в тексте указывается в шестнадцатеричном формате после префикса "U+". Например, кодовая точка U+0041 — это шестнадцатеричное число 0041 (равное десятичному числу 65). Он представляет символ «A» в стандарте Unicode.

Каждому персонажу также присваивается уникальное имя, определяющее его и никакое другое. Например, коду U+0041 назначается имя символа «ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A». U + 0A1B назначается имя персонажа «ГУРМУХИ БУКВА ЧА». Эти имена Unicode идентичны именам ISO/IEC 10646 для тех же символов.

Стандарт Unicode группирует символы вместе по алфавиту в блоки. сценарий — это любая система связанных символов. Стандарт сохраняет порядок символов в исходном наборе, где это возможно. Когда символы сценария традиционно расположены в определенном порядке — например, в алфавитном порядке — стандарт Unicode упорядочивает их в своем кодовом пространстве, используя тот же порядок, когда это возможно. Блоки сильно различаются по размеру. Например, блок кириллицы не превышает 256 кодовых точек, а блоки для идеограмм CJK содержат многие тысячи кодовых точек.

Символы логически сгруппированы по всему диапазону кодовых точек, который называется кодовым пространством. Кодирование начинается с U+0000 со стандартными символами ASCII и продолжается греческим, кириллическим, еврейским, арабским, индийским и другими алфавитами; затем следуют символы и знаки препинания. Кодовое пространство продолжается Хираганой, Катаканой и Бопомофо. За унифицированными ханьскими идеограммами следует полный набор современного хангыля. Диапазон суррогатных кодовых точек зарезервирован для использования с UTF-16. Ближе к концу BMP находится ряд кодовых точек, зарезервированных для частного использования, за которым следует ряд символов совместимости. Символы совместимости — это варианты символов, которые кодируются только для обеспечения возможности перекодирования в более ранние стандарты и старые реализации, в которых они использовались.

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

Соответствие стандарту Unicode

Стандарт Unicode устанавливает недвусмысленные требования соответствия с точки зрения принципов и архитектуры кодирования, которые он воплощает. Соответствующая реализация имеет следующие минимальные требования:

  • Символы взяты из определенного репертуара Unicode.
  • Символы кодируются в соответствии с одной из форм кодирования.
  • Символы интерпретируются в соответствии с семантикой Unicode.
  • Неназначенные коды не используются.
  • Неизвестные символы не повреждаются.

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

Стабильность

Стандарту Unicode есть куда расти, и в будущих версиях будет закодировано значительное количество скриптов. Этот процесс является строго аддитивным, другими словами, в то время как символы могут быть добавлены или могут быть определены новые свойства символов, никакие символы не будут удалены или интерпретированы несовместимым образом. Эти гарантии стабильности позволяют кодировать данные в Unicode и ожидать, что будущие реализации, соответствующие более поздней версии стандарта Unicode, смогут интерпретировать их так же, как реализации, соответствующие более ранней версии стандарта.

Юникод и ISO/IEC 10646

Стандарт Unicode очень тесно связан с международным стандартом ISO/IEC 10646 (также известным как универсальный набор символов, сокращенно UCS). Тесное сотрудничество и официальная связь между комитетами гарантируют, что все дополнения к любому стандарту скоординированы и синхронизированы, так что два стандарта поддерживают точно такой же репертуар символов и кодировку. Формы кодирования Unicode точно соответствуют формам кодирования, также определенным в ISO/IEC 10646.

Для получения дополнительной информации

Достоверную информацию можно найти в последней версии стандарта Unicode. Эта ссылка приведет вас к самой последней версии стандарта. Обновления и исправления для стандарта Unicode также публикуются на веб-сайте Unicode.

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

Читайте также: