Nowe posty

Autor Wątek: Polskie znaki - w stringu ok, w pojedynczym znaku krzaki.  (Przeczytany 1328 razy)

Offline

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 263
    • Zobacz profil
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;
}

Offline Kuba83

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 109
    • Zobacz profil
Polskie znaki - w stringu ok, w pojedynczym znaku krzaki.
« Odpowiedź #1 dnia: 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.