• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[CR] C++ (#15): Polskie znaki w konsoli: Windows, Linux, MacOS

42 Warsaw Coding Academy
+3 głosów
12,771 wizyt
pytanie zadane 18 kwietnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,780 p.)

CR = Code Review. O co chodzi? Zajrzyj tutaj
Pełna lista wszystkich Code Review? Zajrzyj tutaj

https://www.youtube.com/watch?v=9SnZMDONhFU

Kod z odcinka:

#include <iostream>
#include <cstring>

using namespace std;

char *tr(char *str)
  {
   static char buff[256];
   char cp[]="\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
   if(strlen(str)>=sizeof(buff)) return str;
   char *bf=buff;
   while(*str)
     {
      char *pos=strchr(cp+18,*str);
      *(bf++)=pos?*(pos-18):*str;
      ++str;
     }
   *bf=0;
   return buff;
  }

string napis;

int main()
{

    cout<<tr("Zażółć gęślą jaźń")<<endl;

    cin>>napis;
    cout<<tr("Wpisany ciąg znaków: ")<<napis;

    return 0;
}

Paczka z odcinka: POBIERZ​

3 odpowiedzi

+3 głosów
odpowiedź 7 sierpnia 2016 przez MrMcDanio Początkujący (360 p.)

W kodzie daj system("chcp 28592");

To rozwiązuje tylko część problemu(testowane!)- działa żćłó i może coś jeszcze (ą chyba nie działa - jest nad nim jakiś fistaszek).

Popróbujcie z kodowaniami i pamiętajcie, że to działa TYLKO dla aktualnie włączonej konsoli!

Pzdr.

1
komentarz 29 października 2020 przez lesserr Nowicjusz (100 p.)

Drogi MrMcDanio,

Naszukałem się rozwiązania. Nic nie dawało pożądanych rezultatów. Jestem Ci wdzięczny za podzielenie się rozwiązaniem!
Pozdrawiam serdecznie,

Lesserr4more

+3 głosów
odpowiedź 31 lipca 2019 przez qwiateq Początkujący (430 p.)
Podrzucam jeszcze jeden sposób na uzyskanie polskich znaków w konsoli w Windowsie.

W kodzie źródłowym trzeba dodać następującą linię:

setlocale(LC_ALL, "polish");

i tyle, polskie znaki są poprawnie wyświetlane.
+2 głosów
odpowiedź 9 maja 2016 przez Robert de Clair Mądrala (5,300 p.)
edycja 9 maja 2016 przez Robert de Clair

Hmm odkryłem jeszcze jeden sposób na uzyskanie polskich znaków :) w Windows

1 w codeblocks domyślne kodowanie edytora - UTF-8
2 w kodzie dodajemy bibliotekę windows.h oraz polecenie cmd zmieniąjace kodowanie na utf-8 (chcp 65001)
polecenie to wymusi zmianę kodowania na utf-8 co ciekawe nie zmieni tego permanentnie, tylko na potrzeby naszego programu. po ponownym uruchomieniu konsoli nadal będizemy mieli 852 co mozna sprawdzić zgodnie z filmem poleceniem chcp bez parametru.
3 zapisujemy projekt (na dole w CB informacja o kodowaniu powinna zmienić się z windows1250 na utf-8

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    system("chcp 65001");
    cout << "ZAŻÓŁĆ GĘŚLĄ JAŹŃ zażółć gęślą jaźń" << endl;
    system("pause");
    return 0;
}

 

Edit: niestety pomysł teoretycznie dobry w założeniach - z jakiegoś powodu cin nie chce wypluć tego samego i pomija gdy są polskie znaki.
Jakieś pomysły na rozwinięcie tego?

 

#include <iostream>
#include <windows.h>
using namespace std;
string tekst;

int main()
{
    system("chcp 65001");
    cout << "ZAŻÓŁĆ GĘŚLĄ JAŹŃ zażółć gęślą jaźń" << endl;
    cin>>tekst;
    cout<<"Napisano: "<<tekst<<endl;
    system("pause");
    return 0;
}

 

komentarz 10 lutego 2023 przez Martita Bywalec (2,520 p.)
U mnie działa. Ustaw na utf8 system operacyjny, program w którym kodujesz.
komentarz 10 lutego 2023 przez Martita Bywalec (2,520 p.)
edycja 12 lutego 2023 przez Martita
#include <iostream>
#include <windows.h>
using namespace std;
string tekst;
 
int main()
{
    system("chcp 65001");
    cout << "ZAŻÓŁĆ GĘŚLĄ JAŹŃ zażółć gęślą jaźń" << endl;
    cin>>tekst;
    cout<<"Napisano: "<<tekst<<endl;
    system("pause");
    return 0;
}

 

komentarz 10 lutego 2023 przez Martita Bywalec (2,520 p.)
#include <iostream>
#include <windows.h>
using namespace std;

 
int main()
{
   string tekst;
    system("chcp 65001");
  
    cout << "ZAŻÓŁĆ GĘŚLĄ JAŹŃ zażółć gęślą jaźń" << endl;
    cin>>tekst;
    cout<<"Napisano: "<<tekst<<endl;
    system("pause");
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,293 wizyt
0 głosów
1 odpowiedź 1,178 wizyt
pytanie zadane 9 grudnia 2021 w C i C++ przez jasiu1802 Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 8,386 wizyt

93,377 zapytań

142,379 odpowiedzi

322,527 komentarzy

62,724 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...