Широкий символ
Широ́кий си́мвол — это термин, применяемый в программировании. Представляет собой расширенный символ, который используется для обозначения символьного типа данных[1]. На Windows занимает в памяти 2 байта (16 бит), на Linux - 4 байта (32 бита). Может хранить любой значение из диапазона от 0 до 65 535 (при 2 байтах), либо от 0 до 4 294 967 295 (для 4 байт)[2].
История
В 1960-х годах производители мэйнфреймов и мини-компьютеров начали стандартизировать 8-битный тип данных byte как наименьший тип данных. 7-битный набор символов ASCII стал стандартным отраслевым методом кодирования буквенно-цифровые символы для телетайпных машин и компьютерных терминалов. Дополнительный бит использовался для обеспечения четности, чтобы обеспечить целостность хранения и передачи данных. В результате 8-битный байт стал de facto тип данных для компьютерных систем, хранящих символы ASCII в памяти.
Позже производители компьютеров начали использовать запасной бит для расширения набора символов ASCII за пределы его ограниченного набора Английский алфавит Персонажи. 8-разрядные расширения такие как IBM code page 37, PETSCII и ISO 8859 стал обычным явлением, предлагая поддержку терминалов для Греческий, Кириллица и многие другие. Однако такие расширения по-прежнему были ограничены тем, что зависели от региона и часто не могли использоваться в паре. Для преобразования из одного набора символов в другой приходилось использовать специальные процедуры преобразования, что часто приводило к деструктивному переводу, когда в целевом наборе не существовало эквивалентного символа.
В 1989 году Международная организация по стандартизации начала работу над Универсальным набором символов (UCS), многоязычный набор символов, который может быть закодирован с использованием либо 16-битного (2-байтового), либо 32-битного (4-байтового) значения. Эти большие значения требовали использования типа данных, превышающего 8 бит, для хранения новых символьных значений в памяти. Таким образом, термин «широкий символ» использовался для отличия их от традиционных 8-битных символьных типов данных[3].
Использование
Тип данных wchar_t
по стандартам ANSI/ISO C (а также применяемый в других языках программирования) предназначен для представления широких символов[4].
Стандарт Unicode 4.0 указывает:
«ANSI/ISO C оставляет семантику широких символов на усмотрение конкретной реализации»
а ещё
«размер типа
wchar_t
определяется компилятором, вплоть до минимальных 8 бит. Соответственно, приложения, которым требуется сохранять переносимость на различных C и C++ компиляторах, не должны использоватьwchar_t
для хранения Unicode-текста. Типwchar_t
предназначен для хранения широких символов в том виде, в котором их понимают конкретные компиляторы, и это может не соответствовать Юникоду».
В Windows API тип wchar_t носит обозначение WCHAR и имеет установленные 16-битные размеры, что ограничивает возможность кодирования полного набора символов Unicode (свыше 1 миллиона).
Это нарушает требования стандарта ANSI/ISO C, который предписывает, чтобы любой символьный тип wchar_t был способен содержать все символы системы в одном объекте wchar_t. На практике в WinAPI под WCHAR понимается 16-битное слово из кодировки UTF-16LE (типа WORD), вследствие чего символы с кодами более FFFF16 кодируются парными WCHAR (так называемые «суррогаты»), и все API-функции получают не число символов, а размер массива символов в машинных словах.
В GNU/Linux тип wchar_t
представлен 32-битной величиной. В библиотеке ANSI C за работу с широкими символами отвечают заголовочные файлы <wchar.h> и <wctype.h>[2].
Ссылки
Примечания
- ↑ Юникод: широкий набор символов . © Microsoft 2024. Дата обращения: 27 сентября 2024.
- ↑ 2,0 2,1 Типы данных . metanit.com. Дата обращения: 27 сентября 2024.
- ↑ Грустная история забытых символов. Как не сойти с ума при работе с кодировками в C++ . habr.com (20 мая 2015). Дата обращения: 27 сентября 2024.
- ↑ Роббинс А. Linux программирование в примерах. — М.: КУДИЦ-образ, 2005. — С. 345. — 653 с. — ISBN 5-9579-0059-1.
Данная статья имеет статус «готовой». Это не говорит о качестве статьи, однако в ней уже в достаточной степени раскрыта основная тема. Если вы хотите улучшить статью — правьте смело! |
Данная статья имеет статус «проверенной». Это говорит о том, что статья была проверена экспертом |