UTF-8

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

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

Сравнивая UTF-8 и UTF-16, можно отметить, что наибольший выигрыш в компактности UTF-8 даёт для текстов на латинице, поскольку латинские буквы без диакритических знаков, цифры и наиболее распространённые знаки препинания кодируются в UTF-8 лишь одним байтом, и коды этих латинских букв, цифр и знаков препинания точно соответствуют их кодам в ASCII.[3][4]

Алгоритм кодирования[править | править код]

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

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

Диапазон номеров символов Требуемое количество октетов
00000000-0000007F 1
00000080-000007FF 2
00000800-0000FFFF 3
00010000-0010FFFF 4

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

2. Установить старшие биты первого октета в соответствии с необходимым количеством октетов, определённом на первом этапе:

  • 0xxxxxxx — если для кодирования потребуется один октет;
  • 110xxxxx — если для кодирования потребуется два октета;
  • 1110xxxx — если для кодирования потребуется три октета;
  • 11110xxx — если для кодирования потребуется четыре октета.

Если для кодирования требуется больше одного октета, то в октетах 2-4 два старших бита всегда устанавливаются равными 102 (10xxxxxx). Это позволяет легко отличать первый октет в потоке, потому что его старшие биты никогда не равны 102.

Количество октетов Значащих бит Шаблон
1 7 0xxxxxxx
2 11 110xxxxx 10xxxxxx
3 16 1110xxxx 10xxxxxx 10xxxxxx
4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

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

Примеры кодирования[править | править код]

Символ Двоичный код символа UTF-8 в двоичном виде UTF-8 в шестнадцатеричном виде
$ U+0024 10 0100 00100100 24
¢ U+00A2 1010 0010 11000010 10100010 C2 A2
U+20AC 10 0000 1010 1100 111000010 10000010 10101100 E2 82 AC
𐍈 U+10348 1 0000 0011 0100 1000 111100000 1010000 10001101 10001000 F0 90 8D 88

Маркер UTF-8[править | править код]

Для указания, что файл или поток содержит символы Юникода, в начале файла или потока может быть вставлен маркер последовательности байтов (англ. Byte order mark, BOM), который в случае кодирования в UTF-8 принимает форму трёх байтов: EF BB BF16.

1-ый байт 2-ой байт 3-ий байт
Двоичный код 1110 1111 1011 1011 1011 1111
Шестнадцатеричный код EF BB BF

Пятый и шестой байты[править | править код]

Изначально кодировка UTF-8 допускала использование до шести байтов для кодирования одного символа, однако в ноябре 2003 года стандарт RFC 3629 запретил использование пятого и шестого байтов, а диапазон кодируемых символов был ограничен символом U+10FFFF. Это было сделано для обеспечения совместимости с UTF-16.

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

Примечания[править | править код]

  1. Usage Statistics of Character Encodings for Websites, June 2011  (англ.)
  2. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt  (англ.)
  3. Well, I'm Back. String Theory (англ.). Robert O'Callahan (1 March 2008). Проверено 1 марта 2008. Архивировано 23 августа 2011 года.
  4. Ростислав Чебыкин. Всем кодировкам кодировка. UTF‑8: современно, грамотно, удобно.. HTML и CSS. Проверено 22 марта 2009. Архивировано 23 августа 2011 года.

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

Кодировки символов
Основы алфавиттекст (файлданные) • набор символовконверсия
Исторические кодировки Докомп.: семафорная (Макарова)МорзеБодоМТК-2
Комп.: 6-битнаяУППRADIX-50EBCDIC (ДКОИ-8) • КОИ-7ISO 646
современное
8-битное
представление
символы ASCII (управляющиепечатные) • не-ASCII (псевдографика)
8-битные код.стр. Кириллица: КОИ-8Основная кодировкаMacCyrillic
ISO 8859 1 (лат.)2345 (кир.)6789101112131415 (€)16
Windows 12501251 (кир.)1252125312541255125612571258WGL4
IBM & DOS 437850852855866 «альт.»МИКНИИ ЭВМ
Многобайтные Традиционные DBCS (GB2312) • HTML
Unicode UTF-32UTF-16UTF-8список символов (кириллица)
Связанные темы интерфейс пользователяраскладка клавиатурылокальперевод строкишрифттранслитнестандартные шрифты
Утилиты iconvrecode