Nowe posty

xx konfiguracja sieci domowej (6)
Wczoraj o 23:58:47
clip Brak możliwości instalacji aplikacji na Opensuse Tumbleweed. (2)
Wczoraj o 23:35:02
xx petla while (11)
Wczoraj o 22:14:49
xx Repozytoria Archa (7)
Wczoraj o 21:43:06
xx Ktoś zna datę przejścia Minta 19.3 z bety do oficjala? (47)
Wczoraj o 14:28:28
xx Jak,Zrobić kopię całego dysku? (3)
Wczoraj o 08:39:41
xx Jaki linux na laptop/tablet hybrydowy? (11)
Wczoraj o 08:16:56
xx Brak rozdzielczości 16:9 ubuntu 19.04 (1)
Wczoraj o 01:46:25
xx Dziwne połączenia sieciowe! Co to jest? (14)
2019-12-13, 22:59:42
xx Conky - obraz z kamerki (11)
2019-12-13, 19:09:59

Autor Wątek: Polskie znaki - w stringu ok, w pojedynczym znaku krzaki.  (Przeczytany 1307 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.