MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Șiruri cu suport Unicode

Pentru a lucra cu șiruri care conțin caractere în codări Unicode, C++ oferă în modulul <string> mai multe tipuri suplimentare de șiruri.

  • std::wstring conține un șir de caractere de tip wchar_t
  • std::u8string conține un șir de caractere de tip char8_t (adăugat în C++20)
  • std::u16string conține un șir de caractere de tip char16_t
  • std::u32string conține un șir de caractere de tip char32_t

De exemplu, putem defini o variabilă de tip std::wstring:

std::wstring text;

Aceasta poate fi inițializată și cu o valoare concretă. Atunci când atribuim un șir unei variabile wstring, prefixul L este folosit în fața șirului. Pentru celelalte tipuri, se folosesc sufixe specifice:

  • u8 pentru u8string
  • u pentru u16string
  • U pentru u32string

Exemple de inițializare:

std::wstring text {L"Hello World!"};
std::u8string text8 {u8"Hello World!"};
std::u16string text16 {u"Hello World!"};
std::u32string text32 {U"Hello World!"};

Pentru a afișa un șir de tip std::wstring, se folosește fluxul de ieșire std::wcout:

#include <iostream>
#include <string>
 
int main()
{
    std::wstring text {L"Hello World!"};
    std::wcout << text << std::endl;
}

Pentru celelalte tipuri de șiruri (u8string, u16string, u32string), C++ nu oferă încă fluxuri standard dedicate pentru afișare.

În rest, lucrul cu aceste tipuri de șiruri este similar cu std::string. Se pot folosi aceleași funcții ca în cazul șirurilor obișnuite.

Totuși, trebuie avut în vedere că wstring folosește tipul wchar_t, iar codarea caracterelor depinde de compilator:

  • Pe Windows se folosește de obicei UTF-16, ceea ce înseamnă că un wstring conține caractere de 2 bytes
  • Pe majoritatea celorlalte sisteme se folosește UTF-32, adică wchar_t este de 4 bytes

În acest context, tipurile u8string, u16string și u32string sunt considerate mai recomandabile pentru Unicode, însă suportul pentru procesarea avansată a caracterelor Unicode este încă destul de limitat în C++ la momentul actual.