Широкий символ — Вікіпедія

Широкий символ — термін, що стосується програмування. Він використовується для позначення символьного типу даних, який ширший за традиційні 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>.

Посилання

[ред. | ред. код]