Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Широкий символ представляет собой компьютерный персонаж типа данные , который обычно имеет больший размер , чем традиционный 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]

Ссылки [ править ]

  1. ^ http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx [ мертвая ссылка ]
  2. ^ https://msdn.microsoft.com/en-us/library/System.Text.aspx
  3. ^ "5.2 ANSI / ISO C wchar_t". Стандарт Юникода . Алипранд, Джоан., Консорциум Unicode. (Версия 4.0 ред.). Бостон: Эддисон-Уэсли. 2003. с. 109. ISBN 0-321-18578-1. OCLC  52257637 .CS1 maint: другие ( ссылка )
  4. ^ 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 г.