Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Кодировки / UTF-8.docx
Скачиваний:
35
Добавлен:
23.03.2015
Размер:
60.33 Кб
Скачать

UTF-8

Материал из Википедии — свободной энциклопедии

Перейти к: навигация, поиск

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

Одним из преимуществ является совместимость с ASCII — любые их 7-битные символы отображаются как есть, а остальные выдают пользователю мусор (шум). Поэтому в случае, если латинские буквы и простейшие знаки препинания (включая пробел) занимают существенный объём текста, UTF-8 даёт выигрыш по объёму по сравнению с UTF-16.[3][4]

Замечание: Символы, закодированные в UTF-8, могут быть длиной до шести байт, однако стандарт Unicode не определяет символов выше 0x10ffff, поэтому символы Unicode могут иметь максимальный размер в 4 байта в UTF-8.

Содержание

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

  • 2 Примеры последовательностей

  • 3 Диапазоны кодирования

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

  • 5 UTF-8 и ошибки кодирования/раскодирования

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

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

  • 8 BOM (сигнатура)

  • 9 См. также

  • 10 Примечания

  • 11 Ссылки

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

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

Примеры последовательностей

В таблице ниже значения представлены в шестнадцатиричной системе счисления. Порядок байт в значении: Little Endian. На практике для каждого значения выбирается представление с минимальной длиной байт (большие — не рациональны).

Значение

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

ABCDEF (произвольное 5-байтовое)

-

-

-

-

F8 AA BC B7 AF

FC 80 AA BC B7 AF

7FFFFFFF (максимальный код UCS-4)

-

-

-

-

-

FD BF BF BF BF BF

Диапазоны кодирования

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

Коды символов Unicode (HEX)

Размер в UTF-8

Представленные классы символов

00000000 — 0000007F

1 байт

ASCII, в том числе латинский алфавит, простейшие знаки препинания и арабские цифры

00000080 — 000007FF

2 байта

кириллица, расширенная латиница, арабский, армянский, греческий, еврейский и коптский алфавит; сирийское письмо, тана, нко; МФА; некоторые знаки препинания

00000800 — 0000FFFF

3 байта

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

00010000 — 001FFFFF

4 байта

музыкальные символы, редкие китайские иероглифы, вымершие формы письменности

00200000 — 03FFFFFF

5 байт

не используется в Unicode

04000000 — 7FFFFFFF

6 байт

не используется в Unicode

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

Отличительные значения байтов представлены для использования в алгоритмах автоматического определения кодировки текста. Первичным признаком можно считать BOM, которая повышает вероятность использования той или иной кодировки (см. отдельную статью). Следует отметить, что UTF-8 поддерживает кодирование 31-битных кодов UCS-4. Если речь касается символов Unicode, то 5-ти и 6-тибайтовые значения оказываются сильно маловероятными.

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

Значение байта

Статус

Значение

00..7F

без сомнений

ASCII-символы.

80

сильно маловероятен

Не отброшены лидирующие нули у двухбайтового символа.

81..BF

без сомнений

Любой не первый байт символа.

C0

маловероятен

Если не отброшены лидирующие нули у многобайтового символа, то ряд этих байтов также бестолков.

C1..DF

без сомнений

Первый байт двухбайтового символа.

E0

сильно маловероятен

Не отброшены лидирующие нули у трёхбайтового символа.

E1..EF

без сомнений

Первый байт трёхбайтового символа.

F0

сильно маловероятен

Не отброшены лидирующие нули у четырёхбайтового символа.

F1..F7

без сомнений

Первый байт четырёхбайтового символа.

F8

сильно маловероятен

Не отброшены лидирующие нули у пятибайтового символа.

F9..FB

без сомнений

Первый байт пятибайтового символа.

FC

сильно маловероятен

Не отброшены лидирующие нули у шестибайтового символа.

FD

без сомнений

Первый байт шестибайтового символа.

FE..FF

однозначно невозможны

Невозможны в UTF-8 исходя из принципа кодирования. У первого байта символа устанавливается столько старших битов, сколько байтов отводится под символ. Их конец обозначается терминальным битом 0, а оставшиеся биты соответствуют старшим битам значения. Байты 254 и 255 в двоичной системе: 1111111102 и 1111111112. Отсюда очевидно, что у них просто не остаётся битов для значения.

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

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

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

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

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

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

Соседние файлы в папке Кодировки