Широкий символ — Вікіпедія
Широкий символ — термін, що стосується програмування. Він використовується для позначення символьного типу даних, який ширший за традиційні 8-бітні символи. Це не те саме, що Юнікод.
wchar_t
— це тип даних стандарту ANSI/ISO C (а також використовується в інших мовах програмування) для подання широких символів.
У стандарті 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
мають на увазі 2-байтове слово з кодування UTF-16LE (як тип WORD
), тому символи з кодами вище FFFF16 кодуються парою WCHAR
(так звані «сурогати») і всім API-функціям передається не кількість символів, а розмір символьного масиву в машинних словах.
У GNU/Linux тип wchar_t
має розмір 32 біти.
У бібліотеці ANSI C за широкі символи відповідають заголовні файли <wchar.h> і <wctype.h>.
- Стандарт Юнікод, Версія 4.0 [Архівовано 1 квітня 2022 у Wayback Machine.] (англ.)