Localizare și chirilice în consolă
Dacă programul afișează text în chirilică în consolă, este posibil să ne confruntăm cu situația în care, în locul caracterelor chirilice, apar simboluri ciudate. Aceasta este o problemă frecventă în special pe sistemele de operare Windows. În acest caz, este necesar să specificăm explicit localizarea (cultura) curentă pentru afișarea caracterelor. În C++, acest lucru se poate face cu ajutorul funcției încorporate setlocale().
Așadar, modificăm codul folosit în temele anterioare astfel:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
Compilarea și rularea pe Windows pot arăta așa:
c:\cpp>g++ -std=c++20 -Wall -pedantic app.cpp -o app & app
R?S?RiR?RcS' RiS?!
c:\cpp>
În locul textului așteptat, apar caractere neinteligibile. Acum modificăm codul folosind funcția setlocale():
#include <iostream>
int main()
{
setlocale(LC_ALL, "");
std::wcout << L"Hello World!" << std::endl;
}
Pentru afișarea în consolă folosim acum obiectul std::wcout în loc de std::cout, deoarece acesta este destinat lucrului cu caractere Unicode. Se presupune că fișierul sursă este salvat în codificarea UTF-8. De asemenea, în fața șirului de caractere este adăugat prefixul L, care indică un șir wide (larg).
Recompilăm și rulăm aplicația:
c:\cpp>g++ -std=c++20 -Wall -pedantic app.cpp -o app & app
Hello World!
c:\cpp>
Pe unele platforme, de exemplu Ubuntu, această problemă s-ar putea să nu apară deloc. În astfel de cazuri, apelul funcției setlocale nu va avea niciun efect vizibil.