Строка в кодировке UTF-8
Преобразует входную строку в шестнадцатеричный, двоичный или десятичный дамп в кодировке UTF-8 и обратно из дампа в строку.
Этот материал распространяется на условиях лицензии Creative Commons Attribution/Share-Alike License 3.0 (Unported). Это означает, что вы можете размещать этот контент на своем сайте или создавать на его основе собственный (в том числе и в коммерческих целях), при условии сохранения оригинального лицензионного соглашения. Кроме того, Вы должны отметить автора этой работы, путем размещения HTML ссылки на оригинал работы https://planetcalc.ru/9033/. Пожалуйста оставьте без изменения все ссылки на других авторов данной работы или работы, на основе которой создана данная работа (если таковые имеются в спроводительном тексте).
Калькулятор ниже можно использовать для преобразования строки в шестнадцатеричный / двоичный или десятичный дамп в кодировке utf-8. Калькулятор определяет количество символов в строке, число символов занимающих один, два, три или четыре байта в кодировке utf8, а также общее число байт в тексте, закодированном utf8.
Немного информации о представлении строк в Юникоде и uft-8 можно найти под калькуляторами.
Следующий калькулятор выполняет обратное преобразование из строкового дампа строки в кодировке utf-8 в строку. Основание представления закодированной строки (16, 10 или 2 ) калькулятор может определить автоматически. В десятичном дампе обязательно разбиение строки на байты. В качестве разделителя можно использовать любой символ, например пробел.
Предыстория кодирования символов в строке
В старые добрые времена, когда компьютеры были ламповыми смартфонов не было, а объем памяти персональных компьютеров порой не превышал и одного мегабайта, для кодирования одного символа в строке хватало всего лишь одного байта. Первую "половину" байта занимали цифры, символы латинского алфавита, знаки пунктуации и другие полезные символы, все вместе известные как таблица ASCII. Вторую половину разработчики захватили для кодирования символов национальных языков. Захват происходил сразу с разных концов, независимыми специалистами, что привело к существованию нескольких различных кодировок даже для одного и того же языка (например для кириллицы существуют такие одно-байтовые кодировки: КОИ-8, CP866, ISO 8859-5, Windows-1251). Одно-байтовая запись любого символа была простой и очень удобной для разработчиков программ. Однако наличие различных кодировок порождало постоянные проблемы у пользователей: для корректного отображения текста нужно было знать в какой он кодировке , для каждой кодировки нужно иметь отдельные шрифты. Кроме того, выяснилось, что в мире существуют языки, где число символов заметно больше, чем 256, соответственно в один байт все символы этих языков уже не могли поместиться.
Юникод
Для решения вышеописанных проблем в 1991-м году придумали стандарт, описывающий универсальный набор всех символов - Юникод. В первой версии Юникода, насчитывалось 7161 символов1. Для кодирования этого числа символов достаточно 2-х байтов, что привело к расцвету 2-х байтовой кодировки UTF-16 в операционных системах и некоторых языках программирования. Оперировать двух-байтовыми символами в программах оказалось ни чуть не сложнее, чем одно-байтовыми. Однако радость разработчиков продолжалась всего 10 лет, версия 3.1 стандарта Unicode насчитывает в 13 раз больше символов, чем первая. Общее число символов достигло 94 205 и для их кодирования уже мало двух байтов. К моменту написания этой статьи последний стандарт Юникода 13.0 содержит 143 859 символов, и работы по добавлению новых символов не прекращаются. Простейшее решение проблемы - снова удвоить число байт для представления символов. Для этого имеется кодировка UTF-32, позволяющая закодировать 2 147 483 648 позиций.
UTF-8
Однако, всему есть предел. Расходовать 4 байта на один символ показалось слишком расточительным. Поэтому UTF-32 не стала столь популярной, как UTF-16. Вместо этого, сейчас наиболее популярна кодировка с переменной длиной символа UTF-8. UTF-8 появилась в 1992-м году и ранее использовалась преимущественно в unix-системах. Большое достоинство ее заключается в том, что текст, набранный латиницей, полностью совместим с 7-битной кодировкой ASCII, применяемой с 1963-года.
При помощи кодировки UTF-8 можно закодировать 2 097 152 символов, что почти в 15 раз больше текущего объема символов, описанных в Юникоде.
Для определения количества байт, требуемых для кодировки символа, используется от одного до 5-и старших бит2 первого байта:
- 0 - однобайтовый символ, соответствующий таблице ASCII, например Символ доллара
- 110 - двух-байтовый символ, например Символ фунта
- 1110 - трех-байтовый символ, например Символ евро
- 11110 - четырех-байтовый символ, например Смайлик
Каждый последующий байт содержит 2-битовый маркер дополнительного байта: 10. Для получения позиции символа в Юникоде вспомогательные биты просто удаляются, оставшаяся битовая последовательность будет соответствовать номеру символа.
Комментарии