Для поддержки строк с символами кодировок Unicode в С++ в модуле <string>
также есть еще ряд дополнительных типов строк.
std::wstring содержит строку символов типа wchar_t
std::u8string содержит строку символов типа char8_t (добавлена в C++20)
std::u16string содержит строку символов типа char16_t
std::u32string содержит строку символов типа char32_t
Например, определим переменную типа std::wstring
std::wstring text;
Ее также можно инициализировать конкретной строкой. При присвоении переменной wstring
перед строкой указывается префикс L.
Для определения строк других типов также применяются определенные суффиксы: u8 для u8string, u для
u16string и U для u32string. Например, определим переменные этих типов
std::wstring text {L"Hello World!"}; std::u8string text8{u8"Hello World!"}; std::u16string text16 {u"Hello World!"}; std::u32string text32 {U"Hello World!"};
Для вывода строки типа std::wstring
применяется поток std::wcout
#include <iostream> #include <string> int main() { std::wstring text {L"Hello World!"}; std::wcout << text << std::endl; // Hello! Good bye... }
Для вывода строк остальных типов в С++ пока не определено своих типов потоков.
В остальном работа со строками этих типов аналогична работе с типом string
, они могут использовать те же функции, что и тип string
.
Однако стоит учитывать, что поскольку wstring
использует тип символов wchar_t
, то
кодировка символов таких строк зависит от компилятом. На Windows обычно применяется UTF-16, соответственно строка будет состоять из 2-байтовых символов UTF-16.
Но в большинстве других систем применяются 4-байтные символы UTF-32 wchar_t
. На этом фоне типы u8string
, u16string
и u32string
выглядят более предпочтительно, однако на данный момент в C++ имеется довольно ограниченная поддержка по работе с символами Unicode.