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

Если бы вас спросили, «Чем UTF-8 отличается от Unicode?», вы бы с уверенностью дали чёткий ответ? В наши дни интернационализации все разработчики должны это сделать. Я думаю, что многие из нас не различают эти понятия должным образом. Если вы чувствуете, что принадлежите к такой группе, то должны прочитать это ультракороткое введение в наборы символов и кодировки.

На самом деле, сравнивать UTF-8 и Unicode - это как сравнивать яблоки и апельсины: UTF-8 - это кодировка; Unicode - это набор символов.

Набор символов - это список символов с уникальными номерами (эти номера иногда называют «code points»). Например, в наборе символов Unicode, номер «41» соответствует английской букве «A».

Кодировка - это алгоритм, который преобразует числа (номера в наборе символов) в двоичный код, понятный машине. Например, последовательность «1 2 3 4» в кодировке UTF-8 запишется как:

00000001 00000010 00000011 00000100

Теперь всё вместе

Допустим, приложение считывает с диска следующую информацию:

1101000 1100101 1101100 1101100 1101111

Приложение «знает», что эти данные представляют собой строку в формате Unicode, закодированную в кодировке UTF-8, поэтому, на первом этапе, оно преобразует двоичные данные в числа, используя алгоритм UTF-8. В результате получится следующее:

104 101 108 108 111

Поскольку, полученная строка - это unicode-строка, то, на втором этапе, приложение представит каждое отдельное число как символ, используя набор символов Unicode. Результат - слово «hello».

Заключение

Теперь, когда кто-нибудь спросит Вас, «Чем UTF-8 отличается от Unicode?», вы сможете с уверенностью ответить: UTF-8 и Unicode нельзя сравнивать. UTF-8 - это кодировка, которая используются для перевода двоичных данных в числа. Unicode - это набор символов, который используется для преобразования чисел в символы.

Привожу подробное описание кодировки UTF-8:

UTF-8

UTF-8 (от англ. Unicode Transformation Format, 8-bit - «формат преобразования Юникода, 8-битный») - одна из общепринятых и стандартизированных кодировок текста, которая позволяет хранить символы Юникода, используя переменное количество байт (от 1 до 6).

Стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D. Кодировка нашла широкое применение в UNIX-подобных операционных системах и веб-пространстве.

Сам же формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в Plan 9. В качестве BOM использует последовательность байт EF 16 , BB 16 , BF 16 (что у неё самой является трёх-байтовой реализацией символа FEFF 16).

Одним из преимуществ является совместимость с ASCII - любые их 7-битные символы отображаются как есть, а остальные выдают пользователю мусор (шум).

Поэтому в случае, если латинские буквы и простейшие знаки препинания (включая пробел) занимают существенный объём текста, UTF-8 даёт выигрыш по объёму по сравнению с UTF-16.

  • 1 Принцип кодирования
  • 2 Конвертирование в UTF-8
    • 2.1 UTF-32LE в UTF-8
    • 2.2 UTF-32BE в UTF-8
  • 3 Максимальный потенциал
    • 3.1 Кодирование битовых цепочек
  • 4 Диапазоны Unicode
  • 5 Отличительные значения байтов
  • 6 UTF-8 и ошибки кодирования/декодирования
  • 7 Самосинхронизация и UTF-16

Принцип кодирования

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

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

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

2. Подготовить старшие биты первого октета (0xxxxxxx для одного октета, 110xxxxx — два, 1110xxxx — три и т.д.). Для остальных октетов два старших бита равны 10 (10xxxxxx).

Количество байт Значащих бит Первый байт Шаблон полностью
1 7 0xxxxxxx 0xxxxxxx
2 11 110xxxxx 110xxxxx 10xxxxxx
3 16 1110xxxx 1110xxxx 10xxxxxx 10xxxxxx
4 21 11110xxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 26 111110xx 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6 31 1111110x 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

3. Заполнить оставшиеся биты (в п.2 обозначены x) в октетах номером символа Юникода, выраженном в двоичном виде. Начать с младших битов номера символа, поставив их в младшие биты последнего октета кода. И так далее, пока все биты номера символа не будут перенесены в свободные биты октетов.

Пример

Код BOM для UTF-8 = EF BB BF (16) = 1110 1111 1011 1011 1011 1111 (2)

В таблице ниже значения представлены в шестнадцатеричной системе счисления. На практике для каждого значения выбирается единственное верное представление по алгоритму, стандартизированному в RFC 3629 (с минимальной длиной байт, большие - не разрешены; и представлены для наглядности и тестов кодировщиков).

Код символа Имя символа 1 байт 2 байта 3 байта 4 байта 5 байт 6 байт
0000 NUL 00 C0 80 E0 80 80 F0 80 80 80 F8 80 80 80 80 FC 80 80 80 80 80
0073 Малая латинская s 73 C1 B3 E0 81 B3 F0 80 81 B3 F8 80 80 81 B3 FC 80 80 80 81 B3
041A Большая кириллическая К D0 9A E0 90 9A F0 80 90 9A F8 80 80 90 9A FC 80 80 80 90 9A
0BF5 Символ года на тамильском ௵ E0 AF B5 F0 80 AF B5 F8 80 80 AF B5 FC 80 80 80 AF B5
26218 Китайский иероглиф F0 A6 88 98 F8 80 A6 88 98 FC 80 80 A6 88 98
10FFFF Максимальный код Unicode F4 8F BF BF F8 84 8F BF BF FC 80 84 8F BF BF
7FFFFFFF Максимальный код UCS-4 FD BF BF BF BF BF

Конвертирование в UTF-8

UTF-32LE в UTF-8

Схемой можете воспользоваться при кодировании и раскодировании.

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

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

UTF-32BE в UTF-8

Значащие биты в форме записи UTF-32BE располагаются подряд, начиная с заполнения младшего байта. Задача преобразования UTF-32BE в UTF-8 сводится к выбору соответствующей формы UTF-8 и копированию значащих битов UTF-32BE без каких либо дополнительных преобразований.

Очень часто требуется проверять наличие старших битов числа. Следующий код на языке Си исключает случайные описки при наборе маски #define UTF8_MASK(bits) (~((int)0) << (bits)) if (!(value & UTF8_MASK(7))) // 7 - количество значащих бит. // Можно подставлять также: 11, 16, 21, 26, 31. { // Выполняется, если у числа нет битов, установленных в "1", кроме младших 7 } Предыдущий код будет заменен препроцессором на этот: if (!(value & 0xFFFFFF80)) { }

Максимальный потенциал

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

Алгоритм UTF-8 технически позволяет записывать код любой длины. Но для эффективной и надёжной работы алгоритма необходимо ограничение длины кода. Действующий стандарт Unicode 6.х предполагает использование кода до 21-го бита, то есть до четырех байт в UTF-8.

Кодирование битовых цепочек

Занимает байт Кодирует бит Представление кода по алгоритму UTF-8
1 7 0xxx-xxxx
2 11 110x-xxxx 10xx-xxxx
3 16 1110-xxxx 10xx-xxxx 10xx-xxxx
4 21 1111-0xxx 10xx-xxxx 10xx-xxxx 10xx-xxxx
5 26 1111-10xx 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx
6 31 1111-110x 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx
7 36 1111-1110 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx
8 41 1111-1111 100x-xxxx 10xx-xxxx … 10xx-xxxx
9 46 1111-1111 1010-xxxx 10xx-xxxx … 10xx-xxxx
10 51 1111-1111 1011-0xxx 10xx-xxxx … 10xx-xxxx
11 56 1111-1111 1011-10xx 10xx-xxxx … 10xx-xxxx
12 61 1111-1111 1011-110x 10xx-xxxx … 10xx-xxxx
13 66 1111-1111 1011-1110 10xx-xxxx … 10xx-xxxx
14 71 1111-1111 1011-1111 100x-xxxx 10xx-xxxx … 10xx-xxxx
15 76 1111-1111 1011-1111 1010-xxxx 10xx-xxxx … 10xx-xxxx
16 81 1111-1111 1011-1111 1011-0xxx 10xx-xxxx … 10xx-xxxx
17 86 1111-1111 1011-1111 1011-10xx 10xx-xxxx … 10xx-xxxx
18 91 1111-1111 1011-1111 1011-110x 10xx-xxxx … 10xx-xxxx
19 96 1111-1111 1011-1111 1011-1110 10xx-xxxx … 10xx-xxxx
20 101 1111-1111 1011-1111 1011-1111 100x-xxxx 10xx-xxxx … 10xx-xxxx

Диапазоны Unicode

В таблице ниже представлены диапазоны кодирования символов Unicode в UTF-8.

Коды символов Unicode (HEX) Размер в UTF-8 Представленные классы символов
00000000 - 0000007F 1 байт ASCII, в том числе латинский алфавит, простейшие знаки препинания и арабские цифры
00000080 - 000007FF 2 байта кириллица, расширенная латиница, арабский, армянский, греческий, еврейский и коптский алфавит; сирийское письмо, тана, нко; МФА; некоторые знаки препинания
00000800 - 0000FFFF 3 байта все другие современные формы письменности, в том числе грузинский алфавит, индийское, китайское, корейское и японское письмо; сложные знаки препинания; математические и другие специальные символы
00010000 - 001FFFFF 4 байта музыкальные символы, смайлы, редкие китайские иероглифы, вымершие формы письменности, 00110000 - 001FFFFF не используется в Unicode
00200000 - 03FFFFFF 5 байт не используется в Unicode
04000000 - 7FFFFFFF 6 байт не используется в Unicode

Отличительные значения байтов

Отличительные значения байтов представлены в первую очередь для использования в алгоритмах автоматического определения кодировки текста. Первичным признаком можно считать BOM, которая повышает вероятность использования той или иной кодировки (см. отдельную статью). Другим признаком является обнаружение не валидных или сильно маловероятных байт, или же наоборот вероятных. Здесь же следует отметить, что UTF-8 поддерживает кодирование 31-битных кодов UCS-4. Если речь касается символов Unicode, то пяти- и шестибайтовые значения оказываются сильно маловероятными. И есть ещё один примечательный момент - в кодировке UTF-8 возможно избыточное кодирование, что порождает многозначность. Например, ASCII-символ можно закодировать шестью вариантами байтовых последовательностей, но это не означает не валидность избыточных байтовых последовательностей. И здесь можно впасть в заблуждение когда первый байт содержит только нулевые биты значения - для последовательностей выше двух байт исключительно это нормально.

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

Значение байта Статус Значение
00..7F без сомнений ASCII-символы.
80..BF без сомнений Любой не первый байт символа.
С0..C1 избыточное кодирование Первый байт двухбайтового символа, который содержит ASCII-код.
C2..DF без сомнений Первый байт двухбайтового символа.
E0 небольшие сомнения Первый байт трёхбайтового символа, но им же могут начинаться символы с избыточным кодированием (последовательности E0 80 и E0 81).
E1..EF без сомнений Первый байт трёхбайтового символа.
F0 небольшие сомнения Первый байт четырёхбайтового символа, но им же могут начинаться символы с избыточным кодированием (последовательности F0 80 A0 и ниже по последнему байту).
F1..F7 без сомнений Первый байт четырёхбайтового символа.
F8 небольшие сомнения Первый байт пятибайтового символа, но им же могут начинаться символы с избыточным кодированием (последовательности F0 80 и F0 87).
F9..FB без сомнений Первый байт пятибайтового символа, не используется для кодирования Unicode.
FC небольшие сомнения Первый байт шестибайтового символа, но им же могут начинаться символы с избыточным кодированием (последовательности FС 80 и F0 83).
FD без сомнений Первый байт шестибайтового символа, не используется для кодирования Unicode.
FE..FF невозможны при кодировании вплоть до 31 бита У первого байта символа устанавливается столько старших битов, сколько байтов отводится под символ. Их конец обозначается терминальным битом 0, а оставшиеся биты соответствуют старшим битам значения. Байты 254 и 255 в двоичной системе: 11111110 2 и 11111111 2 соответствуют длинам 7 и 8, а длина 31 бит может быть закодирован шестью байтами.

UTF-8 и ошибки кодирования/декодирования

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

Так выглядит фраза «Человек сейчас увидит лишь то, что ожидает увидеть.» если она воспринята декодировщиком в кодировке Windows-1251, а не UTF-8:

Человек сейчас увидит лишь то, что ожидает увидеть.

Фраза «Человек сейчас увидит лишь то, что ожидает увидеть.» при двойном кодировании UTF-8 в UTF-8:

Р В§Р ВµР В»Р С Р Р†Р ВµР С» СЃРµРв»-час СѻРІРёРґРёС‚ лишь РЎвЂљР С , РЎвЂЎРЎвЂљР С Р С Р В¶Р С‘Р Т‘Р В°Р ВµРЎвЂљ Сѻвидеть.

Самосинхронизация и UTF-16

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

UTF-8 обладает свойством самосинхронизации при обработке 8-битными байтами. Альтернативной UTF-8 является кодировка UTF-16, которая уже обрабатывается 16-битными словами.

Возможно возникновение сомнения что UTF-16 не является самосинхронизирующейся. В настоящий момент передача данных в компьютере в подавляющем большинстве производится цельными октетами - 8 бит или ничего (см. IPv4, IPv6, SATA для современной аппаратуры и ATA с PATA для недавней).

В данных условиях UTF-8 имеет преимущество в характеристике самосинхронизации перед UTF-16, если речь касается аппаратной передачи данных или работы с байтовым потоком (чтение Unicode-данных с произвольной позиции).

Если же работа осуществляется в оперативной памяти одной машины, то UTF-16 так же является самосинхронизирующейся (если аппаратура способна подавать цельные 16-битные слова).

Приглашаю всех высказываться в

Причиной разобраться в том, как же работает UTF-8 и что такое Юникод заставил тот факт, что VBScript не имеет встроенных функций работы с UTF-8. А так как ничего рабочего не нашел, то пришлось писть/дописывать самому. Опыт на мой взгляд полезный в любом случае. Для лучшего понимания начну с теории.

О Юникоде

До появления Юникода широко использовались 8-битные кодировки, главные минусы которых очевидны:
  • Всего 255 символов, да и то часть из них не графические;
  • Возможность открыть документ не с той кодировкой, в которой он был создан;
  • Шрифты необходимо создавать для каждой кодировки.
Так и было решено создать единый стандарт «широкой» кодировки, которая включала бы все символы (при чем сначала хотели в нее включить только обычные символы, но потом передумали и начали добавлять и экзотические). Юникод использует 1 112 064 кодовых позиций (больше чем 16 бит). Начало дублирует ASCII, а дальше остаток латиницы, кирилица, другие европейские и азиатские символы. Для обозначений символов используют шестнадцатеричную запись вида «U+xxxx» для первых 65k и с большим количеством цифр для остальных.

О UTF-8

Когда-то я думал что есть Юникод, а есть UTF-8. Позже я узнал, что ошибался.
UTF-8 является лишь представлением Юникода в 8-битном виде. Символы с кодами меньше 128 представляются одним байтом, а так как в Юникоде они повторяют ASCII, то текст написанный только этими символами будет являться текстом в ASCII. Символы же с кодами от 128 кодируются 2-мя байтами, с кодами от 2048 - 3-мя, от 65536 - 4-мя. Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.
0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Кодируем в UTF-8

Порядок действий примерно такой:
  • Каждый символ превращаем в Юникод.
  • Проверяем из какого символ диапазона.
  • Если код символа меньше 128, то к результату добавляем его в неизменном виде.
  • Если код символа меньше 2048, то берем последние 6 бит и первые 5 бит кода символа. К первым 5 битам добавляем 0xC0 и получаем первый байт последовательности, а к последним 6 битам добавляем 0x80 и получаем второй байт. Конкатенируем и добавляем к результату.
  • Похожим образом можем продолжить и для больших кодов, но если символ за пределами U+FFFF придется иметь дело с UTF-16 суррогатами.
Function EncodeUTF8(s) Dim i, c, utfc, b1, b2, b3 For i=1 to Len(s) c = ToLong(AscW(Mid(s,i,1))) If c < 128 Then utfc = chr(c) ElseIf c < 2048 Then b1 = c Mod &h40 b2 = (c - b1) / &h40 utfc = chr(&hC0 + b2) & chr(&h80 + b1) ElseIf c < 65536 And (c < 55296 Or c > 57343) Then b1 = c Mod &h40 b2 = ((c - b1) / &h40) Mod &h40 b3 = (c - b1 - (&h40 * b2)) / &h1000 utfc = chr(&hE0 + b3) & chr(&h80 + b2) & chr(&h80 + b1) Else " Младший или старший суррогат UTF-16 utfc = Chr(&hEF) & Chr(&hBF) & Chr(&hBD) End If EncodeUTF8 = EncodeUTF8 + utfc Next End Function Function ToLong(intVal) If intVal < 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function

Декодируем UTF-8

  • Ищем первый символ вида 11xxxxxx
  • Считаем все последующие байты вида 10xxxxxx
  • Если последовательность из двух байт и первый байт вида 110xxxxx, то отсекаем приставки и складываем, умножив первый байт на 0x40.
  • Аналогично для более длинных последовательностей.
  • Заменяем всю последовательность на нужный символ Юникода.
Function DecodeUTF8(s) Dim i, c, n, b1, b2, b3 i = 1 Do While i <= len(s) c = asc(mid(s,i,1)) If (c and &hC0) = &hC0 Then n = 1 Do While i + n <= len(s) If (asc(mid(s,i+n,1)) and &hC0) <> &h80 Then Exit Do End If n = n + 1 Loop If n = 2 and ((c and &hE0) = &hC0) Then b1 = asc(mid(s,i+1,1)) and &h3F b2 = c and &h1F c = b1 + b2 * &h40 Elseif n = 3 and ((c and &hF0) = &hE0) Then b1 = asc(mid(s,i+2,1)) and &h3F b2 = asc(mid(s,i+1,1)) and &h3F b3 = c and &h0F c = b3 * &H1000 + b2 * &H40 + b1 Else " Символ больше U+FFFF или неправильная последовательность c = &hFFFD End if s = left(s,i-1) + chrw(c) + mid(s,i+n) Elseif (c and &hC0) = &h80 then " Неожидаемый продолжающий байт s = left(s,i-1) + chrw(&hFFFD) + mid(s,i+1) End If i = i + 1 Loop DecodeUTF8 = s End Function

(коды от 0 до 127), т.е. одним байтом кодируются латинские буквы, цифры и специальные символы. Русские буквы (кириллица) представляются 16-битными (двухбайтными) кодами:

110XXXXX 10XXXXXX,

где X обозначены двоичные разряды для размещения кода символа в соответствии с таблицей UNICODE .

Юникод (англ. Unicode) - стандарт кодирования символов, позволяющий представить знаки почти всех письменных языков. Представляемые в юникоде символы кодируются целыми числами без знака. Эти числа будем называть кодами символов в юникоде или просто UNICODE . Юникод имеет несколько форм представления символов в компьютере: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE) . (Англ. Unicode transformation format - UTF).

Рассмотрим, как кодируется в UTF-8 буква Ж . Её UNICODE - 1046 10 или 0416 16 или 10000 010110 2 . UNICODE в двоичном виде разбивается на две части: пять левых бит и шесть правых. Левая часть дополняется до байта признаком 110 двухбайтного кода UTF-8 : 110 10000. К правой части приписываются два бита 10 признака продолжения многобайтного кода: 10 010110. Окончательно код буквы Ж в UTF-8 выглядит так:

110 10000 10 010110 2
или D0 96 16

Таким образом, русская буква кодируется дважды: сначала в 11-битный UNICODE , а затем - в 16-битный UTF-8.

В приведённой ниже таблице, кроме кодов UNICODE и UTF-8 в шестнадцатиричной системе счисления, даны коды UTF-8 в десятичной системе счисления и для сравнения коды кириллицы в кодировке CP-1251 , иначе называемой windovs-1251 .

Таблица кодов кириллицы в UTF-8
Символ UNICODE UTF-8 CP-1251
Шестн. Десят Шестн. Десят
А 0410 1040 D090 208 144 192
Б 0411 1041 D091 208 145 193
В 0412 1042 D092 208 146 194
Г 0413 1043 D093 208 147 195
Д 0414 1044 D094 208 148 196
Е 0415 1045 D095 208 149 197
Ж 0416 1046 D096 208 150 198
З 0417 1047 D097 208 151 199
И 0418 1048 D098 208 152 200
Й 0419 1049 D099 208 153 201
К 041A 1050 D09A 208 154 202
Л 041B 1051 D09B 208 155 203
М 041C 1052 D09C 208 156 204
Н 041D 1053 D09D 208 157 205
О 041E 1054 D09E 208 158 206
П 041F 1055 D09F 208 159 207
Р 0420 1056 D0A0 208 160 208
С 0421 1057 D0A1 208 161 209
Т 0422 1058 D0A2 208 162 210
У 0423 1059 D0A3 208 163 211
Ф 0424 1060 D0A4 208 164 212
Х 0425 1061 D0A5 208 165 213
Ц 0426 1062 D0A6 208 166 214
Ч 0427 1063 D0A7 208 167 215
Ш 0428 1064 D0A8 208 168 216
Щ 0429 1065 D0A9 208 169 217
Ъ 042A 1066 D0AA 208 170 218
Ы 042B 1067 D0AB 208 171 219
Ь 042C 1068 D0AC 208 172 220
Э 042D 1069 D0AD 208 173 221
Ю 042E 1070 D0AE 208 174 222
Я 042F 1071 D0AF 208 175 223
а 0430 1072 D0B0 208 176 224
б 0431 1073 D0B1 208 177 225
в 0432 1074 D0B2 208 178 226
г 0433 1075 D0B3 208 179 227
д 0434 1076 D0B4 208 180 228
е 0435 1077 D0B5 208 181 229
ж 0436 1078 D0B6 208 182 230
з 0437 1079 D0B7 208 183 231
и 0438 1080 D0B8 208 184 232
й 0439 1081 D0B9 208 185 233
к 043A 1082 D0BA 208 186 234
л 043B 1083 D0BB 208 187 235
м 043C 1084 D0BC 208 188 236
н 043D 1085 D0BD 208 189 237
о 043E 1086 D0BE 208 190 238
п 043F 1087 D0BF 208 191 239
р 0440 1088 D180 209 128 240
с 0441 1089 D181 209 129 241
т 0442 1090 D182 209 130 242
у 0443 1091 D183 209 131 243
ф 0444 1092 D184 209 132 244
х 0445 1093 D185 209 133 245
ц 0446 1094 D186 209 134 246
ч 0447 1095 D187 209 135 247
ш 0448 1096 D188 209 136 248
щ 0449 1097 D189 209 137 249
ъ 044A 1098 D18A 209 138 250
ы 044B 1099 D18B 209 139 251
ь 044C 1100 D18C 209 140 252
э 044D 1101 D18D 209 141 253
ю 044E 1102 D18E 209 142 254
я 044F 1103 D18F 209 143 255
Символы вне общего правила
Ё 0401 1025 D001 208 101 168
ё 0451 1025 D191 209 145 184

Для корректной работы данного сайта требуется JavaScript. Пожалуйста, включите поддержку JavaScript в настройках вашего обозревателя.

Таблица символов Юникода

Показать все
Диапазон: 0000-001F: Управляющие символы C0 0020-007F: Основная латиница 0080-009F: Управляющие символы C1 00A0-00FF: Дополнительные символы Latin-1 0100-017F: Расширенная латиница-A 0180-024F: Расширенная латиница-B 0250-02AF: Расширенный набор символов международного фонетического алфавита 02B0-02FF: Некомбинируемые протяжённые символы-модификаторы 0300-036F: Комбинируемые диакритические знаки 0370-03FF: Греческий и коптский алфавиты 0400-04FF: Кириллица 0500-052F: Дополнительные символы кириллицы 0530-058F: Армянский алфавит 0590-05FF: Иврит 0600-06FF: Арабское письмо 0700-074F: Сирийский алфавит 0750-077F: Дополнительные символы арабского письма 0780-07BF: Тана (мальдивское письмо) 07C0-07FF: Нко 0800-083F: Самаритянское письмо 0840-085F: Мандейский алфавит 08A0-08FF: Расширенный набор символов арабского письма-А 0900-097F: Деванагари 0980-09FF: Бенгальская 0A00-0A7F: Гурмукхи 0A80-0AFF: Гуджарати 0B00-0B7F: Ория 0B80-0BFF: Тамильская 0C00-0C7F: Телугу 0C80-0CFF: Каннада 0D00-0D7F: Малаялам 0D80-0DFF: Сингальская 0E00-0E7F: Тайская письменность 0E80-0EFF: Лаосская письменность 0F00-0FFF: Тибетская письменность 1000-109F: Мьянманская письменность 10A0-10FF: Грузинский алфавит 1100-11FF: Хангыль (корейская письменность) 1200-137F: Эфиопская слоговая письменность 1380-139F: Дополнительные символы эфиопской письменности 13A0-13FF: Письменность чероки 1400-167F: Канадское слоговое письмо 1680-169F: Огам 16A0-16FF: Руническая письменность 1700-171F: Тагальская (байбайин) 1720-173F: Хануноо 1740-175F: Бухид 1760-177F: Тагбанва 1780-17FF: Кхмерская письменность 1800-18AF: Старомонгольская письменность 18B0-18FF: Расширенный набор символов канадского слогового письма 1900-194F: Письменность лимбу 1950-197F: Письменность тай лэ 1980-19DF: Новый алфавит тай лы 19E0-19FF: Кхмерские символы 1A00-1A1F: Бугийская письменность (лонтара) 1A20-1AAF: Старый алфавит тай лы (Тай Тхам) 1B00-1B7F: Балийская письменность 1B80-1BBF: Сунданская письменность 1BC0-1BFF: Батакское письмо 1C00-1C4F: Письменность лепча (ронг) 1C50-1C7F: Письменность Ол Чики 1CD0-1CFF: Ведические символы 1D00-1D7F: Фонетические расширения 1D80-1DBF: Дополнительные фонетические расширения 1DC0-1DFF: Дополнительные комбинируемые диакритические знаки 1E00-1EFF: Дополнительная расширенная латиница 1F00-1FFF: Расширенный набор символов греческого алфавита 2000-206F: Знаки пунктуации 2070-209F: Надстрочные и подстрочные знаки 20A0-20CF: Символы валют 20D0-20FF: Комбинируемые диакритические знаки для символов 2100-214F: Буквоподобные символы 2150-218F: Числовые формы 2190-21FF: Стрелки 2200-22FF: Математические операторы 2300-23FF: Разнообразные технические символы 2400-243F: Значки управляющих кодов 2440-245F: Символы оптического распознавания 2460-24FF: Вложенные буквы и цифры 2500-257F: Символы для рисования рамок 2580-259F: Символы заполнения 25A0-25FF: Геометрические фигуры 2600-26FF: Разнообразные символы 2700-27BF: Дингбаты 27C0-27EF: Разнообразные математические символы-A 27F0-27FF: Дополнительные стрелки-A 2800-28FF: Азбука Брайля 2900-297F: Дополнительные стрелки-B 2980-29FF: Разнообразные математические символы-B 2A00-2AFF: Дополнительные математические операторы 2B00-2BFF: Разнообразные символы и стрелки 2C00-2C5F: Глаголица 1AB0-1AFF: Комбинированные диакритические знаки (расширение A) 1CC0-1CCF: Расширенный набор символов сунданского письма A9E0-A9FF: Мьянманская письменность (расширение B) AAE0-AAFF: Расширенный набор символов письменности мейтей AB30-AB8F: Расширенная латиница-E AB30-AB6F: Варанг-кшити AB90-ABBF: Письменность Бериа для языка загхава 2C60-2C7F: Расширенная латиница-C 2C80-2CFF: Коптский алфавит 2D00-2D2F: Дополнительные символы грузинского алфавита 2D30-2D7F: Тифинаг 2D80-2DDF: Расширенный набор символов эфиопского письма 2DE0-2DFF: Расширенная кириллица-A 2E00-2E7F: Дополнительные знаки пунктуации 2E80-2EFF: Дополнительные иероглифические ключи ККЯ 2F00-2FDF: Иероглифические ключи словаря Канси 2FF0-2FFF: Символы описания иероглифов 3000-303F: Символы и пунктуация ККЯ 3040-309F: Хирагана 30A0-30FF: Катакана 3100-312F: Чжуинь (бопомофо) 3130-318F: Чамо, комбинируемое с хангылем 3190-319F: Знаки, используемые в камбуне 31A0-31BF: Расширенный набор символов бопомофо 31C0-31EF: Черты ККЯ 31F0-31FF: Фонетические расширения катаканы 3200-32FF: Вложенные буквы и месяцы ККЯ 3300-33FF: Знаки совместимости ККЯ 3400-4DBF: Унифицированные иероглифы ККЯ (расширение А) 4DC0-4DFF: Гексаграммы И-Цзин 4E00-9FFF: Унифицированные иероглифы ККЯ A000-A48F: Слоги и A490-A4CF: Радикалы и A4D0-A4FF: Алфавит лису A500-A63F: Слоговая письменность ваи A640-A69F: Расширенная кириллица-B A6A0-A6FF: Письменность бамум A700-A71F: Символы изменения тона A720-A7FF: Расширенная латиница-D A800-A82F: Силоти Нагри A830-A83F: Индийские числовые символы A840-A87F: Квадратное письмо Пагба-ламы A880-A8DF: Саураштра A8E0-A8FF: Расширенный набор символов деванагари A900-A92F: Кайях Ли A930-A95F: Реджанг A960-A97F: Хангыль (расширение A) A980-A9DF: Яванская письменность AA00-AA5F: Тямское письмо AA60-AA7F: Мьянманская письменность (расширение A) AA80-AADF: Письменность Тай Вьет АВ00-АВ2F: Набор символов эфиопского письма (расширение A) ABC0-ABFF: Мейтей/Манипури AC00-D7AF: Слоги хангыля D800-DB7F: Верхняя часть суррогатных пар DB80-DBFF: Верхняя часть суррогатных пар для частного использования DC00-DFFF: Нижняя часть суррогатных пар E000-F8FF: Область для частного использования F900-FAFF: Совместимые иероглифы ККЯ FB00-FB4F: Алфавитные формы представления FB50-FDCF: Формы представления арабских букв-A FDF0-FDFF: Формы представления арабских букв-A FE00-FE0F: Селекторы вариантов начертания FE10-FE1F: Вертикальные формы FE20-FE2F: Комбинируемые половинки символов FE30-FE4F: Формы совместимости ККЯ FE50-FE6F: Варианты малого размера FE70-FEFF: Формы представления арабских букв-B FF00-FFEF: Полуширинные и полноширинные формы FFF0-FFFF: Специальные символы

  • Что такое Юникод?

    Юникод (англ. Unicode ) - это универсальный стандарт кодирования символов, который позволяет предоставить знаки всех языков мира.

    В отличие от ASCII , один символ кодируется двумя байтами, что позволяет использовать 65 536 символов, против 256 .

    Как известно, один байт - это целое число от нуля до 255 . В свою очередь, байт состоит из восьми бит, которые хранят числовые значения в двоичном виде, где каждая следующая единица текущего бита является в два раза большим значением предыдущего бита. Таким образом, два байта могут хранить в себе число от нуля до 65 535 , что и позволяет использовать 65 536 символов (ноль + 65 535 , ноль - это тоже число, он не является ничем).

    Символы Юникода разделены на секции. Первые 128 символов повторяют таблицу ASCII .

    За отображение символов отвечает семейство кодировок Юникода (Unicode Transformation Format - UTF ). Наиболее известная и широко применяемая кодировка - UTF-8 .

  • Как пользоваться таблицей?

    Символы представлены по 16 штук на строке. Сверху вы можете видеть шестнадцатеричное число от 0 до 16 . Слева аналогичные числа в шестнадцатеричном виде от 0 до FFF .
    Соединив число слева с числом сверху, можно узнать код символа. Например: английская буква F расположена на строке 004 , в столбике 6 : 004 + 6 = код символа 0046 .

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

    В поисковое поле можно ввести ключевые слова поиска, например: стрелки, солнце, сердце. Либо можно указать код символа в любом формате, например: 1123, 04BC, چ. Или сам символ, если требуется узнать код символа.

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