0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>О кодировании символов</a></li>
1
<ul><li><a>О кодировании символов</a></li>
2
<li><a>Юникод</a></li>
2
<li><a>Юникод</a></li>
3
<li><a>UTF-16 и его характеристика</a><ul><li><a>Принцип кодирования</a></li>
3
<li><a>UTF-16 и его характеристика</a><ul><li><a>Принцип кодирования</a></li>
4
<li><a>Порядок байт</a></li>
4
<li><a>Порядок байт</a></li>
5
<li><a>UTF-16 и Windows</a></li>
5
<li><a>UTF-16 и Windows</a></li>
6
</ul></li>
6
</ul></li>
7
<li><a>UTF-8 и отличие от UTF-16</a><ul><li><a>Особенности стандартов</a></li>
7
<li><a>UTF-8 и отличие от UTF-16</a><ul><li><a>Особенности стандартов</a></li>
8
</ul></li>
8
</ul></li>
9
</ul><p>При работе с текстом на компьютерах и других устройствах предстоит иметь дело с разнообразными кодировками. Без них оборудование не сможет работать с буквами и символами.</p>
9
</ul><p>При работе с текстом на компьютерах и других устройствах предстоит иметь дело с разнообразными кодировками. Без них оборудование не сможет работать с буквами и символами.</p>
10
<p>Существуют разнообразные кодировки. Сегодня предстоит познакомиться с UTF-16 и сравнить данный стандарт с UTF-8. А еще - разобраться с тем, что собой представляет кодирование символом.</p>
10
<p>Существуют разнообразные кодировки. Сегодня предстоит познакомиться с UTF-16 и сравнить данный стандарт с UTF-8. А еще - разобраться с тем, что собой представляет кодирование символом.</p>
11
<p>Данная информация будет полезна как IT-специалистам, так и обычным пользователям. Она поможет разобраться в ключевых аспектах существующих кодировок и объяснит, как работать с UTF-16.</p>
11
<p>Данная информация будет полезна как IT-специалистам, так и обычным пользователям. Она поможет разобраться в ключевых аспектах существующих кодировок и объяснит, как работать с UTF-16.</p>
12
<h2>О кодировании символов</h2>
12
<h2>О кодировании символов</h2>
13
<p>Кодирование символов - это процесс присвоением графическим символам разнообразных номеров. Особенно это касается символов человеческого языка (алфавитов). С помощью кодирования можно будет хранить, передавать и преобразовывать текст посредством цифровых устройств, преимущественно - компьютеров.</p>
13
<p>Кодирование символов - это процесс присвоением графическим символам разнообразных номеров. Особенно это касается символов человеческого языка (алфавитов). С помощью кодирования можно будет хранить, передавать и преобразовывать текст посредством цифровых устройств, преимущественно - компьютеров.</p>
14
<p>Числовые значения, которые составляют кодировку символов - это кодовые точки. Совместно они формируют кодовое пространство. Оно также называется картой символов или кодовыми таблицами.</p>
14
<p>Числовые значения, которые составляют кодировку символов - это кодовые точки. Совместно они формируют кодовое пространство. Оно также называется картой символов или кодовыми таблицами.</p>
15
<h2>Юникод</h2>
15
<h2>Юникод</h2>
16
<p>Unicode - это стандарт шифрования (кодирования) символов. Он используется преимущественно для работы с текстовыми данными. Предназначается для поддержки текста во всех мировых системах письменности, доступных для оцифровки.</p>
16
<p>Unicode - это стандарт шифрования (кодирования) символов. Он используется преимущественно для работы с текстовыми данными. Предназначается для поддержки текста во всех мировых системах письменности, доступных для оцифровки.</p>
17
<p>С помощью Юникода можно зашифровать все алфавиты мира. Сейчас этот стандарт является одним из самых распространенных в Интернете. Он был предложен в 1991 году некоммерческой организацией "Консорциум Юникода".</p>
17
<p>С помощью Юникода можно зашифровать все алфавиты мира. Сейчас этот стандарт является одним из самых распространенных в Интернете. Он был предложен в 1991 году некоммерческой организацией "Консорциум Юникода".</p>
18
<p>Применение соответствующего стандарта позволяет зашифровать огромное количество символов из самых разных систем письменности:</p>
18
<p>Применение соответствующего стандарта позволяет зашифровать огромное количество символов из самых разных систем письменности:</p>
19
<ul><li>математические символы;</li>
19
<ul><li>математические символы;</li>
20
<li>китайские и японские иероглифы;</li>
20
<li>китайские и японские иероглифы;</li>
21
<li>кириллицу;</li>
21
<li>кириллицу;</li>
22
<li>греческий алфавит;</li>
22
<li>греческий алфавит;</li>
23
<li>латиницу;</li>
23
<li>латиницу;</li>
24
<li>музыкальные ноты и так далее.</li>
24
<li>музыкальные ноты и так далее.</li>
25
</ul><p>Переключать для реализации поставленной задачи кодовые страницы не придется.</p>
25
</ul><p>Переключать для реализации поставленной задачи кодовые страницы не придется.</p>
26
<p>Стандарт Unicode включает в себя две части - универсальный набор символов (UCS) и семейство кодировок (UTF). Первая используется для перечисления допустимого по стандарту Юникода символа. Каждому из них она присваивает код в виде неотрицательного целого числа, которое обычно записывается в шестнадцатеричной форме с префиксом U+. Вторая часть (семейство кодировок) определяет способы преобразования символов для их дальнейшей передачи в потоке или в документе.</p>
26
<p>Стандарт Unicode включает в себя две части - универсальный набор символов (UCS) и семейство кодировок (UTF). Первая используется для перечисления допустимого по стандарту Юникода символа. Каждому из них она присваивает код в виде неотрицательного целого числа, которое обычно записывается в шестнадцатеричной форме с префиксом U+. Вторая часть (семейство кодировок) определяет способы преобразования символов для их дальнейшей передачи в потоке или в документе.</p>
27
<p>Unicode - стандарт, который предусматривает несколько "версий". UTF-16 и UTF-8 как раз к ним относятся. Далее предстоит получше узнать символы Unicode, записанные соответствующими методами.</p>
27
<p>Unicode - стандарт, который предусматривает несколько "версий". UTF-16 и UTF-8 как раз к ним относятся. Далее предстоит получше узнать символы Unicode, записанные соответствующими методами.</p>
28
<h2>UTF-16 и его характеристика</h2>
28
<h2>UTF-16 и его характеристика</h2>
29
<p>UTF-16 - это один из известных способов кодирования элементов Юникода. Они представлены в виде последовательности 16-битных слов.</p>
29
<p>UTF-16 - это один из известных способов кодирования элементов Юникода. Они представлены в виде последовательности 16-битных слов.</p>
30
<p>Соответствующий способ шифрования позволяет записывать компоненты Юникода в диапазонах:</p>
30
<p>Соответствующий способ шифрования позволяет записывать компоненты Юникода в диапазонах:</p>
31
<ul><li>U+000…U+D7FF;</li>
31
<ul><li>U+000…U+D7FF;</li>
32
<li>U+E000…U+10FFF.</li>
32
<li>U+E000…U+10FFF.</li>
33
</ul><p>Общее количество доступных символьных элементов составляет 1 112 064. Каждый компонент записывается при помощи суррогатных пар - одним или двумя словами. UTF-16 описана в приложении Q к международному стандарту ISO/IEC 10646.</p>
33
</ul><p>Общее количество доступных символьных элементов составляет 1 112 064. Каждый компонент записывается при помощи суррогатных пар - одним или двумя словами. UTF-16 описана в приложении Q к международному стандарту ISO/IEC 10646.</p>
34
<p>Первая версия Юникода представляла собой кодировку в 16 бит. У нее была предусмотрена определенная символьная ширина. Общее количество разных символов составляло 216 - 65536. Вторая версия Unicode вышла в 1996 году. Вместе с ней кодовая область была значительно расширена. Для сохранения совместимости с теми текстовыми элементами, где был ранее реализован код, 16 бит Юникода сформировали UTF-16.</p>
34
<p>Первая версия Юникода представляла собой кодировку в 16 бит. У нее была предусмотрена определенная символьная ширина. Общее количество разных символов составляло 216 - 65536. Вторая версия Unicode вышла в 1996 году. Вместе с ней кодовая область была значительно расширена. Для сохранения совместимости с теми текстовыми элементами, где был ранее реализован код, 16 бит Юникода сформировали UTF-16.</p>
35
<h3>Принцип кодирования</h3>
35
<h3>Принцип кодирования</h3>
36
<p>В рассматриваемом стандарте элементы кодируются 2 байтами с использованием разнообразных диапазонных значений: от 0 до FFFF16. Допустимо для шифрования использовать диапазоны 000016…D7FF16 и E00016…FFFF16. Исключенный диапазон D80016…DFFF16 используется для суррогатных пар. Так называются символьные записи, которые шифруются двумя словами по 16 бит.</p>
36
<p>В рассматриваемом стандарте элементы кодируются 2 байтами с использованием разнообразных диапазонных значений: от 0 до FFFF16. Допустимо для шифрования использовать диапазоны 000016…D7FF16 и E00016…FFFF16. Исключенный диапазон D80016…DFFF16 используется для суррогатных пар. Так называются символьные записи, которые шифруются двумя словами по 16 бит.</p>
37
<p>Элементы Юникода до FFFF16 включительно (без учета "суррогатного" диапазона) записываются словом 16 бит как есть. При использовании диапазона более 16 бит (1000016…10FFFF16) необходимо для шифрования использовать такой алгоритм:</p>
37
<p>Элементы Юникода до FFFF16 включительно (без учета "суррогатного" диапазона) записываются словом 16 бит как есть. При использовании диапазона более 16 бит (1000016…10FFFF16) необходимо для шифрования использовать такой алгоритм:</p>
38
<ol><li>Из кода имеющегося элемента вычитается 1000016. Результатом станет значение от 0 до FFFFF16. Оно размещается в разрядной сетке 20 бит.</li>
38
<ol><li>Из кода имеющегося элемента вычитается 1000016. Результатом станет значение от 0 до FFFFF16. Оно размещается в разрядной сетке 20 бит.</li>
39
<li>Старшие 10 бит складываются с D80016. Результат записывается в ведущее (самое первое) слово. Оно должно быть в диапазоне D80016…DBFF16.</li>
39
<li>Старшие 10 бит складываются с D80016. Результат записывается в ведущее (самое первое) слово. Оно должно быть в диапазоне D80016…DBFF16.</li>
40
<li>Младшие 10 бит складываются с DC0016. Результат записывается в последующее слово (второе), входящее в диапазон DC0016…DFFFF16.</li>
40
<li>Младшие 10 бит складываются с DC0016. Результат записывается в последующее слово (второе), входящее в диапазон DC0016…DFFFF16.</li>
41
</ol><p>UTF-16 - стандарт, который используется в Интернете очень часто. Он является наиболее распространенным в Windows.</p>
41
</ol><p>UTF-16 - стандарт, который используется в Интернете очень часто. Он является наиболее распространенным в Windows.</p>
42
<h3>Порядок байт</h3>
42
<h3>Порядок байт</h3>
43
<p>В рассматриваемом стандарте одна символьная запись представлена последовательностью 2-х байтов или двух пар байтов. Системы, которые совместимы с процессорами x86, называют little endian. Если поддерживается совместимость с процессорами SPARC или m68k, - big endian.</p>
43
<p>В рассматриваемом стандарте одна символьная запись представлена последовательностью 2-х байтов или двух пар байтов. Системы, которые совместимы с процессорами x86, называют little endian. Если поддерживается совместимость с процессорами SPARC или m68k, - big endian.</p>
44
<p>Чтобы определить порядок байтов, нужно использовать метку порядков байтов. В начале текста записывается код U+FEFF. Если вместо этой записи считывается U+FFFE, порядок байтов будет обратным. Это связано с тем, что код U+FFFE в Юникоде не кодирует символьные компоненты. Он зарезервирован специально для определения порядка байтов.</p>
44
<p>Чтобы определить порядок байтов, нужно использовать метку порядков байтов. В начале текста записывается код U+FEFF. Если вместо этой записи считывается U+FFFE, порядок байтов будет обратным. Это связано с тем, что код U+FFFE в Юникоде не кодирует символьные компоненты. Он зарезервирован специально для определения порядка байтов.</p>
45
<h3>UTF-16 и Windows</h3>
45
<h3>UTF-16 и Windows</h3>
46
<p>Рассматриваемый стандарт является наиболее распространенным в Windows-семействе. Он самый популярный в API Win32. В современных Виндовс предусматриваются два способа представления текста:</p>
46
<p>Рассматриваемый стандарт является наиболее распространенным в Windows-семействе. Он самый популярный в API Win32. В современных Виндовс предусматриваются два способа представления текста:</p>
47
<ul><li>в виде 8-битных кодовых страниц;</li>
47
<ul><li>в виде 8-битных кодовых страниц;</li>
48
<li>в виде UTF-16.</li>
48
<li>в виде UTF-16.</li>
49
</ul><p>Во втором случае Windows не будет накладывать на прикладное программное обеспечение никаких ограничений в плане кодирования текстовых файлов. Это позволяет приложениям задействовать не только UTF-16LE, но и UTF-16BE путем установки и трактовки соответствующей метки порядка байтов. Внутренний формат Windows всегда представлен UTF-16LE. Это необходимо учесть, если потребуется работать с исполняемыми документами, использующими юникодовые версии функций WinAPI. Строки в них всегда кодируются через UTF-16LE. Этот же вариант используется в файловых системах NTFS и FAT с поддержкой длинных имен при именовании документов.</p>
49
</ul><p>Во втором случае Windows не будет накладывать на прикладное программное обеспечение никаких ограничений в плане кодирования текстовых файлов. Это позволяет приложениям задействовать не только UTF-16LE, но и UTF-16BE путем установки и трактовки соответствующей метки порядка байтов. Внутренний формат Windows всегда представлен UTF-16LE. Это необходимо учесть, если потребуется работать с исполняемыми документами, использующими юникодовые версии функций WinAPI. Строки в них всегда кодируются через UTF-16LE. Этот же вариант используется в файловых системах NTFS и FAT с поддержкой длинных имен при именовании документов.</p>
50
<p>UTF-8 - это представление Юникода, которое обеспечивает наилучшую совместимость со старыми системами - такими, где использовались символьные записи 8 бит. Текст, состоящий только из элементов с номером меньше 128 при использовании UTF-8 преобразуется в обычный ASCII. Остальные компоненты Юникода - это последовательность длиной от двух до 6 байт. Чаще всего - от 1 до 4 байт. Это связано с тем, что в Unicode нет символов с кодом больше 10FFFF16. В ближайшем будущем их введение не планируется.</p>
50
<p>UTF-8 - это представление Юникода, которое обеспечивает наилучшую совместимость со старыми системами - такими, где использовались символьные записи 8 бит. Текст, состоящий только из элементов с номером меньше 128 при использовании UTF-8 преобразуется в обычный ASCII. Остальные компоненты Юникода - это последовательность длиной от двух до 6 байт. Чаще всего - от 1 до 4 байт. Это связано с тем, что в Unicode нет символов с кодом больше 10FFFF16. В ближайшем будущем их введение не планируется.</p>
51
<p>UTF-8 используется в качестве оптимизатора. Кодировка отлично подойдет для сочетания с ASCII, которые требуют для кодирования всего лишь 1 байт. Данный стандарт хорошо работает с текстом на английском языке, а также с веб-документами.</p>
51
<p>UTF-8 используется в качестве оптимизатора. Кодировка отлично подойдет для сочетания с ASCII, которые требуют для кодирования всего лишь 1 байт. Данный стандарт хорошо работает с текстом на английском языке, а также с веб-документами.</p>
52
<p>Если говорить про ранее рассмотренный стандарт (кодировка UTF 16), то он больше ориентирован на работу с обширными символьными наборами. Большинство из них используют для шифрования 2 байта, но некоторые - 4 байта. Это оптимальное решение для материалов, в которых встречаются преимущественно элементы, отличные от ASCII. В качестве примера можно привести азиатские алфавиты.</p>
52
<p>Если говорить про ранее рассмотренный стандарт (кодировка UTF 16), то он больше ориентирован на работу с обширными символьными наборами. Большинство из них используют для шифрования 2 байта, но некоторые - 4 байта. Это оптимальное решение для материалов, в которых встречаются преимущественно элементы, отличные от ASCII. В качестве примера можно привести азиатские алфавиты.</p>
53
<h3>Особенности стандартов</h3>
53
<h3>Особенности стандартов</h3>
54
<p>UTF-8 - стандарт, который отлично подходит для текста, базирующегося на ASCII. К ним относят исходные коды и HTML-документы. В веб-кодировке этот вариант пользуется спросом за счет следующих моментов:</p>
54
<p>UTF-8 - стандарт, который отлично подходит для текста, базирующегося на ASCII. К ним относят исходные коды и HTML-документы. В веб-кодировке этот вариант пользуется спросом за счет следующих моментов:</p>
55
<ol><li>Совместимость с ASCII. Шифрование "Аски" осуществляется в один байт. Это позволяет добиться отличной совместимости.</li>
55
<ol><li>Совместимость с ASCII. Шифрование "Аски" осуществляется в один байт. Это позволяет добиться отличной совместимости.</li>
56
<li>Эффективное и рациональное использование памяти. На символ "уходит" от 1 до 4 байт.</li>
56
<li>Эффективное и рациональное использование памяти. На символ "уходит" от 1 до 4 байт.</li>
57
<li>Отсутствие привязки к порядку байтов. Обмен данными между системами за счет этой особенности становится более простым.</li>
57
<li>Отсутствие привязки к порядку байтов. Обмен данными между системами за счет этой особенности становится более простым.</li>
58
<li>Защита от уязвимостей. UTF-8 дает возможность устранения некоторых уязвимостей безопасности.</li>
58
<li>Защита от уязвимостей. UTF-8 дает возможность устранения некоторых уязвимостей безопасности.</li>
59
</ol><p>Несмотря на это, ранее упомянутый и подробно рассмотренный стандарт все равно пользуется спросом. UTF-16 пригодится из-за:</p>
59
</ol><p>Несмотря на это, ранее упомянутый и подробно рассмотренный стандарт все равно пользуется спросом. UTF-16 пригодится из-за:</p>
60
<ol><li>Фиксированной длины в BMP. Для основной многоязычной плоскости используются фиксированные 2 байта. Это положительно сказывается на некоторых операциях.</li>
60
<ol><li>Фиксированной длины в BMP. Для основной многоязычной плоскости используются фиксированные 2 байта. Это положительно сказывается на некоторых операциях.</li>
61
<li>Индексации данных. 16-битный код обеспечивает более быстрый доступ к символьным элементам в пределах BMP. Это достигается за счет их фиксированной длины. Скорость обработки дополнительных компонентов может упасть. Это связано с тем, что их представление требует пар 16-битных значений.</li>
61
<li>Индексации данных. 16-битный код обеспечивает более быстрый доступ к символьным элементам в пределах BMP. Это достигается за счет их фиксированной длины. Скорость обработки дополнительных компонентов может упасть. Это связано с тем, что их представление требует пар 16-битных значений.</li>
62
<li>Оптимизации использования памяти. Соответствующая особенность характерна для проектов, активно работающих с нелатинскими символами и в основном имеющих дело с памятью.</li>
62
<li>Оптимизации использования памяти. Соответствующая особенность характерна для проектов, активно работающих с нелатинскими символами и в основном имеющих дело с памятью.</li>
63
</ol><p>При работе с Java необходимо помнить, что тип char и класс String в JVM использует UTF-16. Он необходим для внутреннего представления символов.</p>
63
</ol><p>При работе с Java необходимо помнить, что тип char и класс String в JVM использует UTF-16. Он необходим для внутреннего представления символов.</p>
64
<p>Это означает следующее:</p>
64
<p>Это означает следующее:</p>
65
<ul><li>размер символов char в Java равняется 16 битам;</li>
65
<ul><li>размер символов char в Java равняется 16 битам;</li>
66
<li>при работе со строками нужно принимать во внимание особенности суррогатных пар BMP.</li>
66
<li>при работе со строками нужно принимать во внимание особенности суррогатных пар BMP.</li>
67
</ul><p>Вообще, при выборе оптимального метода шифрования (кодировки) необходимо помнить следующее:</p>
67
</ul><p>Вообще, при выборе оптимального метода шифрования (кодировки) необходимо помнить следующее:</p>
68
<ol><li>Для файлов, в которых используется ASCII, лучше выбирать UTF-8. Он помогает экономить дисковое пространство и обеспечивает более высокую скорость обработки.</li>
68
<ol><li>Для файлов, в которых используется ASCII, лучше выбирать UTF-8. Он помогает экономить дисковое пространство и обеспечивает более высокую скорость обработки.</li>
69
<li>Для XML и HTML, а также их производных, согласно стандартам W3C, лучше использовать UTF-8.</li>
69
<li>Для XML и HTML, а также их производных, согласно стандартам W3C, лучше использовать UTF-8.</li>
70
<li>При выборе нужно ориентироваться на языки представленного контента. Если в тексте преобладают нелатинские записи, может потребоваться UTF-16. Это зависит от конкретных потребностей.</li>
70
<li>При выборе нужно ориентироваться на языки представленного контента. Если в тексте преобладают нелатинские записи, может потребоваться UTF-16. Это зависит от конкретных потребностей.</li>
71
</ol><p>UTF-8 - лидер среди сетевых протокол и текстовых файлов. UTF-16 больше встречается в Windows.</p>
71
</ol><p>UTF-8 - лидер среди сетевых протокол и текстовых файлов. UTF-16 больше встречается в Windows.</p>
72
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
72
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
73
73