Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

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

energizer

  • Gość
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;
}

snajper_8383

  • Gość
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.