Сам язык не имеет ничего общего с юникодом или любой другой кодировкой символов. Это связано с операционной системой. Windows использует UTF16 для поддержки юникода, что подразумевает использование широких символов (16-разрядных символов) - wchar_t или std: wstring. Каждая функция Win Api, работающая со строками, требует широкого ввода символов.
Но системы на основе Unix, то есть Mac OS X или Linux, используют UTF8. Конечно, это зависит только от того, как вы обрабатываете байты в массиве, поэтому вы можете хранить строку UTF16 в общем массиве C или контейнере std: string. Вот почему вы не видите строк в кроссплатформенном коде; вместо этого все строки обрабатываются как UTF8 и при необходимости перекодируются в UTF16 (в Windows).
У вас есть больше вариантов, как справиться с этим немного запутанным. Лично я делаю это, как указано выше - строго используя кодировку UTF8 во всех приложениях, перекодируя строки при взаимодействии с Windows Api и напрямую используя их в Mac OS X. Для успешного перекодирования я использую отличные помощники преобразования: *
Помощники преобразования C ++ UTF-8 (для MSDN, доступно по лицензии Apache, версия 2.0).
Вы также можете использовать кроссплатформенную строку Qt, которая определяет функции преобразования из UTF8 в / из UTF16 и другие кодировки (ANSI, Latin ...).
Таким образом, ответ выше - в Unix всегда используйте UTF8 (std :: string, char), в Windows UTF16 (std :: wstring, wchar_t) - true.