Эта статья требует дополнительных ссылок для проверки . ( февраль 2011 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Широкий символ представляет собой компьютерный персонаж типа данные , который обычно имеет больший размер , чем традиционный 8-битный символ. Увеличенный размер типа данных позволяет использовать более крупные наборы кодированных символов .
История [ править ]
В течение 1960-х производители мэйнфреймов и мини-компьютеров начали стандартизировать 8-битный байт как наименьший тип данных. Набор 7-битных символов ASCII стал отраслевым стандартом для кодирования буквенно-цифровых символов для телетайпов и компьютерных терминалов . Дополнительный бит использовался для проверки четности, чтобы гарантировать целостность хранения и передачи данных. В результате 8-битный байт стал фактическим типом данных для компьютерных систем, хранящих символы ASCII в памяти.
Позже производители компьютеров начали использовать запасной бит, чтобы расширить набор символов ASCII за пределы ограниченного набора символов английского алфавита . 8-битные расширения, такие как кодовая страница IBM 37, PETSCII и ISO 8859, стали обычным явлением, предлагая терминальную поддержку греческого , кириллического и многих других языков . Однако такие расширения все еще были ограничены в том, что они были специфичными для региона и часто не могли использоваться в тандеме. Для преобразования из одного набора символов в другой приходилось использовать специальные процедуры преобразования, что часто приводило к деструктивному преобразованию, когда в целевом наборе не существовало эквивалентного символа.
В 1989 году Международная организация по стандартизации начала работу над универсальным набором символов (UCS), многоязычным набором символов, который можно было закодировать с использованием 16-битного (2-байтового) или 32-битного (4-байтового) значения. Эти большие значения требовали использования типа данных размером более 8 бит для хранения новых символьных значений в памяти. Таким образом, термин широкий символ использовался, чтобы отличить их от традиционных типов данных 8-битных символов.
Связь с UCS и Unicode [ править ]
Широкий символ обозначает размер типа данных в памяти. Он не указывает, как определяется каждое значение в наборе символов. Эти значения вместо этого определяются с использованием наборов символов, при этом UCS и Unicode просто представляют собой два общих набора символов, которые кодируют больше символов, чем позволяет 8-битное числовое значение (всего 255).
Отношение к многобайтовым символам [ править ]
Подобно тому, как более ранние системы передачи данных страдали от отсутствия 8-битного чистого тракта данных, современные системы передачи часто не поддерживают 16-битные или 32-битные тракты данных для символьных данных. Это привело к созданию систем кодирования символов, таких как UTF-8, которые могут использовать несколько байтов для кодирования значения, которое слишком велико для одного 8-битного символа.
Стандарт C различает многобайтовые кодировки символов, в которых используется фиксированное или переменное количество байтов для представления каждого символа (в основном используется в исходном коде и внешних файлах), от широких символов , которые представляют собой представления символов во время выполнения в отдельных объектах ( обычно больше 8 бит).
Размер широкого символа [ править ]
UTF-16 с прямым порядком байтов - это стандарт кодирования в Microsoft (и в операционной системе Windows). Тем не менее, с суррогатными парами он также поддерживает 32-разрядные версии. [1] Платформа .NET Framework поддерживает несколько реализаций расширенных символов, включая UTF7, UTF8, UTF16 и UTF32. [2]
Платформа Java требует, чтобы переменные широких символов были определены как 16-битные значения и чтобы символы были закодированы с использованием UTF-16 (из-за прежнего использования UCS-2), в то время как современные Unix- подобные системы обычно требуют UTF-8 в своих интерфейсах. .
Особенности программирования [ править ]
C / C ++ [ править ]
C и C ++ стандартные библиотеки включают в себя целый ряд объектов для работы с широкими символами и строками , состоящими из них. Широкие символы определяются с использованием типа данных wchar_t
, который в исходном стандарте C90 был определен как
- «интегральный тип, диапазон значений которого может представлять различные коды для всех членов самого большого расширенного набора символов, указанного среди поддерживаемых локалей» (ISO 9899: 1990 §4.1.5)
И C, и C ++ представили символьные типы фиксированного размера, char16_t
а char32_t
в редакциях их соответствующих стандартов 2011 г. обеспечивали однозначное представление 16-битных и 32-битных форматов преобразования Unicode , оставив их в зависимости от wchar_t
реализации. Стандарт Unicode 4.0 ISO / IEC 10646: 2003 гласит:
- "Ширина
wchar_t
зависит от компилятора и может составлять всего 8 бит. Следовательно, программы, которые необходимо переносить через любой компилятор C или C ++, не должны использоватьсяwchar_t
для хранения текста Unicode.wchar_t
Тип предназначен для хранения определенных компилятором широких символов. , которые могут быть символами Юникода в некоторых компиляторах ". [3]
Python [ править ]
Согласно документации Python , язык иногда использует wchar_t
в качестве основы для своего символьного типа Py_UNICODE
. Это зависит от того wchar_t
, «совместим ли с выбранным вариантом сборки Python Unicode» в этой системе. [4]
Ссылки [ править ]
- ^ http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx [ мертвая ссылка ]
- ^ https://msdn.microsoft.com/en-us/library/System.Text.aspx
- ^ "5.2 ANSI / ISO C wchar_t". Стандарт Юникода . Алипранд, Джоан., Консорциум Unicode. (Версия 4.0 ред.). Бостон: Эддисон-Уэсли. 2003. с. 109. ISBN 0-321-18578-1. OCLC 52257637 .CS1 maint: другие ( ссылка )
- ^ https://docs.python.org/c-api/unicode.html, по состоянию на 19 декабря 2009 г.
Внешние ссылки [ править ]
- Стандарт Unicode, версия 4.0 - онлайн-издание
- C Функции широких символов @ Java2S
- Функции Java Unicode @ Java2S
- Многобайтовая (3) страница руководства @ FreeBSD.org
- Многобайтовые и широкие символы @ Microsoft Developer Network
- Наборы символов Windows @ Сеть разработчиков Microsoft
- Справочник по программированию Unicode и наборов символов @ Microsoft Developer Network
- Поддерживайте простую поддержку многобайтовых символов @ EuroBSDCon, Beograd, 25 сентября 2016 г.