UTF-8: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Retimuko (обсуждение | вклад) стиль |
Andreev (обсуждение | вклад) Удалена транскрипция "you ti fi", всегда произносилось "нормативно", то есть "эф". Или поставьте ссылку на ваше чтение. |
||
Строка 1: | Строка 1: | ||
'''UTF-8''' |
'''UTF-8''' от {{lang-en|Unicode Transformation Format, 8-bit}} — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования [[Набор символов|символов]], позволяющий более компактно хранить и передавать символы [[Юникод]]а, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой [[ASCII]]. Стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D. |
||
Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в [[UNIX-подобная операционная система|UNIX-подобных операционных системах]]<ref>[http://w3techs.com/technologies/overview/character_encoding/all Usage Statistics of Character Encodings for Websites, June 2011]{{ref-en}}</ref>. |
Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в [[UNIX-подобная операционная система|UNIX-подобных операционных системах]]<ref>[http://w3techs.com/technologies/overview/character_encoding/all Usage Statistics of Character Encodings for Websites, June 2011]{{ref-en}}</ref>. |
||
Формат UTF-8 был разработан [[2 сентября]] [[1992 год]]а [[Томпсон, Кен|Кеном Томпсоном]] и [[Пайк, Роб|Робом Пайком]], и реализован в [[Plan 9]]<ref>http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt{{ref-en}}{{Недоступная ссылка|date=Ноябрь 2019 |bot=InternetArchiveBot }}</ref>. Идентификатор кодировки в Windows – 65001<ref>[https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers Code Page Identifiers - Windows applications | Microsoft Docs<!-- Заголовок добавлен ботом -->]</ref>. |
Формат UTF-8 был разработан [[2 сентября]] [[1992 год]]а [[Томпсон, Кен|Кеном Томпсоном]] и [[Пайк, Роб|Робом Пайком]], и реализован в [[Plan 9]]<ref>http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt{{ref-en}}{{Недоступная ссылка|date=Ноябрь 2019 |bot=InternetArchiveBot }}</ref>. Идентификатор кодировки в Windows – 65001<ref>[https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers Code Page Identifiers - Windows applications | Microsoft Docs<!-- Заголовок добавлен ботом -->]</ref>. |
Версия от 12:56, 5 февраля 2020
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]. Идентификатор кодировки в Windows – 65001[3].
UTF-8, по сравнению с UTF-16, наибольший выигрыш в компактности даёт для текстов на латинице, поскольку латинские буквы без диакритических знаков, цифры и наиболее распространённые знаки препинания кодируются в UTF-8 лишь одним байтом, и коды этих символов соответствуют их кодам в ASCII.[4][5]
Алгоритм кодирования
Алгоритм кодирования в 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
|
100100
|
00100100
|
24
|
¢ | U+00A2
|
10100010
|
11000010 10100010
|
C2 A2
|
€ | U+20AC
|
100000 10101100
|
11100010 10000010 10101100
|
E2 82 AC
|
𐍈 | U+10348
|
1 00000011 01001000
|
11110000 10010000 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.
Примечания
- ↑ Usage Statistics of Character Encodings for Websites, June 2011 (англ.)
- ↑ http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (англ.) (недоступная ссылка)
- ↑ Code Page Identifiers - Windows applications | Microsoft Docs
- ↑ Well, I'm Back. String Theory (англ.). Robert O'Callahan (1 марта 2008). Дата обращения: 1 марта 2008. Архивировано 23 августа 2011 года.
- ↑ Ростислав Чебыкин. Всем кодировкам кодировка. UTF‑8: современно, грамотно, удобно. HTML и CSS. Дата обращения: 22 марта 2009. Архивировано 23 августа 2011 года.