Widzę że nikt nie potrafi odpowiedzieć na tak proste pytanie. Więc do rzeczy. Oczywiście jeśli skompilujemy program i uruchomimy pod konsolą - to zamiast polskich liter będziemy mieli krzaczki. Chodzi tutaj o strony kodowe (Strona kodowa - przyjęty w informatyce sposób na przypisanie poszczególnym kodom binarnym różnych znaków pisarskich.) Kiedy piszemy nasz kod - to kompilator używa strony kodowej 1250 (Central European - Windows), a kiedy uruchomiamy nasz program pod konsolą to jest używana strona kodowa 852 (Central European - DOS) - i dlatego mamy krzaczki.
Można to rozwiązać na dwa sposoby :x
- Na przykładzie kodu prostego programu
include
# include
using namespace std;
int main ()
{
locale myloc (“Polish”);
locale oldloc = locale::global (myloc);
cout << " To jest test - ąśżźćęł." << endl;
locale::global (oldloc);
cin.get ();
cin.get ();
return 0;
}
Na powyższym przykładzie (do kompilacji używałem darmowego Visual C++ Express Edition) widzimy że mamy dwa pliki nagłówkowe i . I właśnie żeby mieć polskie znaki musimy dodać plik locale ( patrz przykładowy program) oraz użyć “komend” przed tekstem który chcemy wyświetlić.
locale myloc (“Polish”);
locale oldloc = locale::global (myloc);
Później przed return 0; wstawiamy
locale::global (oldloc);
- Sposób - jeśli używasz Visual C++ Express Edition, Zapisz plik w innej stronie kodowej czyli 852. Załóżmy że masz otwarty swój projekt, skompilowałeś go i uruchomiłeś i masz w konsoli krzaczki. Kliknij File > Advanced Save Option. Ukaże ci się okno, w Encoding wybierz Central European - DOS - 852. Kliknij OK. Skompiluj projekt. =D> . Nie wiem jak jest w innych kompilatorach (IDE).
Czasami funkcja locale może nie zadziałać np jeśli używamy darmowego kompilatora Dev-C++ (http://www.bloodshed.net/devcpp.html) Wtedy musimy zmodyfikować nasz program używając funkcji CharToOem. Oto przykład
#include
#include
using namespace std;
int main ()
{
//przed konwersją
cout << “Przed: Zażółć gęślą jaźń” << endl;
//bufor musi zostac zaalokowany przed wywolaniem funkcji
static char bufor[32];
//konwersja CharToOem jest funkcją umożliwiającą konwersję napisu
// do standardu OEM, który także pozwala na wyświetlanie polskich
//znaków w konsoli DOS.
CharToOem( “Po: Zażółć gęślą jaźńzzzzzzzzzzzzzzz” , bufor );
cout << bufor << endl;
system(“PAUSE”);
return 0;
}
Mam nadzieje że to komuś pomoże ![-o<
Mój dalszy Update o polskich znakach w konsoli w Borlandzie C++ Builder i nie tylko, - kolejny sposób wywołania polskich znaków pod konsolą.
//------------------------------------------------------------------
include
using namespace std;
int main()
{
system(“chcp 1250”);
system(“cls”);
cout " To jest test polskich liter żźć";//
cin.get ();
return 0;
}
//------------------------------------------
Pojawi się nam czarne okno konsoli z wyświetlonym komunikatem “To jest test polskich liter…” Możemy nie zobaczyć polskich znaków. Nie zamykamy konsoli. Najeżdżamy na jej górny pasek i wciskamy prawy przycisk myszy. Pojawi się nam menu kontekstowe. Wybieramy - Właściwości - Czcionka. Wybieramy czcionkę Lucida Console. Rozmiar czcionki, okna ustawiamy według naszego gustu. Wybierając tą czcionkę teraz w Borland C++ Builderze będziemy mieli polskie znaki. ![-o<
Jak przyjdą mi jakieś dalsze pomysły co do polskich czcionek w konsoli to je dopiszę. To tyle.
:o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o :o
-------------------------------------------------KOLEJNE ROZWIĄZANIE---------------------------------------------------------------------------------------
#include
using namespace std;
//poprawnie wyswietla polskie znaki w konsoli
string PL(string znak)
{
for (unsigned i = 0; i znak.length(); i ++){
switch(znak_){_
case ‘ą’:
znak = static_cast(165);
break;
case ‘ć’:
znak = static_cast(134);
break;
case ‘ę’:
znak = static_cast(169);
break;
case ‘ł’:
znak = static_cast(136);
break;
case ‘ń’:
znak = static_cast(228);
break;
case ‘ó’:
znak = static_cast(162);
break;
case ‘ś’:
znak = static_cast(152);
break;
case ‘ź’:
znak = static_cast(171);
break;
case ‘ż’:
znak = static_cast(190);
break;
case ‘Ą’:
znak = static_cast(164);
break;
case ‘Ć’:
znak = static_cast(143);
break;
case ‘Ę’:
znak = static_cast(168);
break;
case ‘Ł’:
znak = static_cast(157);
break;
case ‘Ń’:
znak = static_cast(227);
break;
case ‘Ó’:
znak = static_cast(224);
break;
case ‘Ś’:
znak = static_cast(151);
break;
case ‘Ź’:
znak = static_cast(141);
break;
case ‘Ż’:
znak = static_cast(189);
break;
}
}
return znak;
}
-----------------------------------------------------------------
Powyższy plik możemy dołączyć do naszego projektu i zapisać go jako np polskie_znaki.h, lub po prostu uwzględnić go w naszym kodzie. Zawsze kiedy chcemy uzyskać polskie znaki musimy zdanie poprzedzić literami PL oraz umieścić w okrągłych nawiasach, jak na przykładzie- PL(“Nasz tekst z polskimi znakiami”); :o
Przykładowy program.
//--------------------------------------------------------------------------------------
#include
using namespace std;
//poprawnie wyświetla polskie znaki w konsoli
string PL(string znak)
{
for (unsigned i = 0; i znak.length(); i ++){
switch(znak_){_
case ‘ą’:
znak = static_cast(165);
break;
case ‘ć’:
znak = static_cast(134);
break;
case ‘ę’:
znak = static_cast(169);
break;
case ‘ł’:
znak = static_cast(136);
break;
case ‘ń’:
znak = static_cast(228);
break;
case ‘ó’:
znak = static_cast(162);
break;
case ‘ś’:
znak = static_cast(152);
break;
case ‘ź’:
znak = static_cast(171);
break;
case ‘ż’:
znak = static_cast(190);
break;
case ‘Ą’:
znak = static_cast(164);
break;
case ‘Ć’:
znak = static_cast(143);
break;
case ‘Ę’:
znak = static_cast(168);
break;
case ‘Ł’:
znak = static_cast(157);
break;
case ‘Ń’:
znak = static_cast(227);
break;
case ‘Ó’:
znak = static_cast(224);
break;
case ‘Ś’:
znak = static_cast(151);
break;
case ‘Ź’:
znak = static_cast(141);
break;
case ‘Ż’:
znak = static_cast(189);
break;
}
}
return znak;
}
//właściwy program
int main ()
{
cout PL (“Teraz się zabawimy polskimi znakami”) endl;
cout PL(“I znowu - Zażółć gęślą jaźń”) endl;
cin.get ();
cin.get();
return 0;
}
POLSKIE ZNAKI W KONSOLI W ANGIELSKIM WINDOWSIE
Wielu z was posiada anglojęzyczny Windows i pewnie napotkało problemy z wyświetlaniem polskich znaków w konsoli po kompilacji programu. Dzieje się tak dlatego że posiadacie niestety system operacyjny, który ma inny język i wyżej podane przeze mnie przykłady jak wyświetlić polskie znaki w konsoli niestety nie będą działały. By to poprawić należy zrobić następujące czynności (ten przykład został oparty na Windows 7 Premium English) .
:o :o :o :o
1. Kliknij w lewym dolnym rogu przycisk Start - Control Panel - Region and Language
2. W okienku Region and Language wybierz zakładkę Formats a w niej pod Format wybierz Polish (Poland)
3. W okienku Region and Language wybierz zakładkę Location a w niej pod Current location wybierz Poland
4. W okienku Region and Language wybierz zakładkę Keyboards and Languages i kliknij przycisk Change Keyboard a następnie pojawij się okienko Text Services and Input languages i pod Default input language wybierz Polish (Poland) - Polish Programmers, na dole z lewej strony klijkni przycisk Add i dodaj polską klawiaturę też Polish (Programmers), następnie klijkni ok.
5 W okienku Region and Language wybierz zakładkę Administrative , która jest w sumie najważniejszą tam kliknij przycick Change System locale i wybierz Polish (Poland)
6.Uruchom ponownie Windows
Teraz możesz bez przeszkód wykorzystać powyższe przykłady w Windowsie anglojęzycznym by uzyskać polskie znaki w konsoli