Forum Linux.pl

Programowanie => C/C++ => Wątek zaczęty przez: energizer w 2015-05-10, 17:18:40

Tytuł: Polskie znaki - w stringu ok, w pojedynczym znaku krzaki.
Wiadomość wysłana przez: energizer w 2015-05-10, 17:18:40
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;
}
Tytuł: Polskie znaki - w stringu ok, w pojedynczym znaku krzaki.
Wiadomość wysłana przez: snajper_8383 w 2015-05-10, 19:31:56
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.