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