Широкий символ

редактировать

A широкий символ компьютер символ тип данных, который обычно имеет размер больше, чем традиционный 8-битный символ. Увеличенный размер типа данных позволяет использовать более крупные кодированные наборы символов .

Содержание

  • 1 История
  • 2 Отношение к UCS и Unicode
  • 3 Отношение к многобайтовым символам
  • 4 Размер широкого символ
  • 5 Особенности программирования
    • 5.1 C / C ++
    • 5.2 Python
  • 6 Ссылки
  • 7 Внешние ссылки

История

В течение 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-битное значение.

Связь с многобайтовыми символами

Подобно тому, как ранние системы передачи данных страдали от отсутствия 8-битного чистого тракта данных, современные системы передачи часто не поддерживают 16-битные символы. битовые или 32-битные пути данных для символьных данных. Это привело к появлению систем кодирования символов, таких как UTF-8, которые могут использовать несколько байтов для кодирования значения, которое слишком велико для одного 8-битного символа.

Стандарт C различает многобайтовые кодировки символов, в которых используется фиксированное или переменное количество байтов для представления каждого символа (в основном используется в исходном коде и внешних файлах), от широких символов, которые являются во время выполнения представлениями символов в отдельных объектах (обычно больше 8 бит).

Размер широкого символа

UTF-16 с прямым порядком байтов - это стандарт кодирования в Microsoft (и в операционной системе Windows). Но с суррогатными парами он также поддерживает 32-битные. Платформа .NET Framework поддерживает несколько реализаций широких символов, включая UTF7, UTF8, UTF16 и UTF32.

Платформа 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определяемым реализацией. В стандарте 4.0 ISO / IEC 10646: 2003 Unicode говорится, что:

«Ширина wchar_tзависит от компилятора и может составлять всего 8 бит. Следовательно, программы, которые должен быть переносимым через любой компилятор C или C ++ не должен использовать wchar_tдля хранения текста Unicode. Тип wchar_tпредназначен для хранения определенных компилятором широких символов, которые могут быть Символы Unicode в некоторых компиляторах. "

Python

Согласно документации Python, язык иногда использует wchar_tв качестве основы для своего символа введите Py_UNICODE. Это зависит от того, "совместим ли wchar_tс выбранным вариантом сборки Python Unicode" в этой системе.

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-20 15:11:23
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте