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

Широкий символ - це термін, що відноситься до програмування. Він використовується для позначення символьного типу даних, який ширше традиційних 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). Тому символи з кодами вище FFFF 16 кодуються парою WCHAR (так звані "сурогати"). І всім API-функцій передається не кількість символів, а розмір символьного масиву в машинних словах.

У GNU / Linux тип wchar_t має розмір 32 біта.

У бібліотеці ANSI C за широкі символи відповідають заголовні файли < wchar.h > і < wctype.h >.