Я думаю, что лучший способ сделать это - использовать wchar и wstring для символов - они предназначены для строковых операций, не зависящих от локали, и определены как UTF-16 в Windows и как UTF-32 в Linux.
Обратите внимание, что вам нужно использовать правильные функции, например wprintf
вместо printf
... Если вы используете iostream
, я думаю, что это должно работать "из коробки" с wstrings.
РЕДАКТИРОВАТЬ: Обратите внимание, что для wchar_t
необязательно быть Unicode (на практике это часто так). Если wchar_t
(и, следовательно, wstring
) является юникодом, то стандарт C99 (и, следовательно, скорее всего, стандарт C ++) гласит, что __STDC_ISO_10646__
должно быть определено.
Другими словами, если определено __STDC_ISO_10646__
, то wchar_t
- это Unicode - как для точного типа (UTF-16 или UTF-32), вы можете использовать sizeof (wchar_t).