Dlaczego dzieję się tak, że jak mam w zmiennej typu string polskie znaki to wyświetlają się w konsoli prawidłowo (i tu i tu kodowanie UTF-8). Natomiast gdy chcę wyciągnąć ze stringa pojedynczy znak to niestety wali już krzakami. Na windowsie gdy zapisałem plik z kodowaniem OEM 852 wszystko działa jak należy. Ma ktoś jakis pomysł?
#include
using namespace std;
string alfabet = "aąbcćdeę";
int main()
{
cout << alfabet << endl;
cout << alfabet[1];
return 0;
}
Nie znam się za dobrze na c++ (programuje w c). Znaki w utf-8 mają różny rozmiar. Ty próbujesz wyświetlić znak "ą", który ma dwa bajty, a wyświetlasz tylko jeden bajt i dlatego masz krzaka zamiast całej literki.
Zobacz sobie poniższy kod
#include
using namespace std;
string alfabet = "aąbcćdeę";
int main()
{
cout << "Długość zmiennej alfabet: " << alfabet.size() << endl;
cout << alfabet << endl;
cout << alfabet[1] << alfabet[2];
return 0;
}
Myślę, że operator [] klasy string zwraca tylko jeden bajt przy alfabet[1]. Ale nie jest pewien, i pewnie któryś z kolegów, którzy znają się na c++, to objaśni jaśniej.