Sposób na wyświetlanie polskich znaków diakrytycznych w programach konsolowych

0

Szukam sposobu, który pozwoli mi na wyświetlanie polskich znaków diakrytycznych w programach konsolowych.
Środowisko to Code::Blocks 10.05.

Mam np. taki kod:

#include <iostream>

using namespace std;

int main()
{
    cout << "Ten program wyświetla tekst, który zawiera polskie znaki:" << endl;
    cout << endl;

    cout << "ó,ą,ś,ż,ź,ć,ń" << endl;
    cout << endl;

    system("pause");
}

Wiem, że mogę wywoływać te znaki z pomocą char(), ale jest to uciążliwe.

Szukałem na forum, dwa poniższe tematy zawierają chyba najwięcej przydatnych informacji.

http://4programmers.net/Forum/C_i_C++/179063-polskie_znaki_diakrytyczne_w_dev-c++_i_codeblocks_1005
http://4programmers.net/Forum/C_i_C++/113148-C++_Polskie_znaki

Z innego forum: http://forum.dobreprogramy.pl/kompilacja-polskie-znaki-konsoli-t304295-15.html#p2125883

Niestety, te sposoby u mnie nie działają. Wstawiłem również

setlocale(LC_ALL,"");

Również nie działa. Może coś robię źle, a może to kwestia kompilatora ?

0
for(i=32; i<256; i++ ) printf("%6d %c", i, i);

dodanie znacznika <code class="cpp"> - @furious programming

0

206 - ć
210 - ł
230 - ś
242 - ó
245 - ą
251 - ę
253 - ź
276 - ż
344 - ń

przed liczba \

zeby ciagle tego nie pisac to tutaj jak sobie ulatwic zycie:
http://forum.dobreprogramy.pl/kompilacja-polskie-znaki-konsoli-t304295-15.html#p2125883 [to nie jest reklama...]

@ups sorry, mialem jakis blad i nie mialem tych linkow na poczatku - prosze o usuniecie posta

0

A próbowałeś zmienić stronę kodową w konsoli (o ile da się pod Windowsem)? U mnie pod Linuksem twój kod z pierwszego posta wymagał tylko "zakomentowania" system("pause"); i ruszył bez problemu znaki poprawnie wyświetlając

0

Słabo szukałeś, bo problem był na forum poruszany wielokrotnie, w tym ostatni raz tydzień temu.

Jak uzyskać polskie znaki w strum. wyjścia

1

zamiast kombinować z locale, należy zapisać plik źródłowy w kodowaniu CP852.

0
sig napisał(a)

A próbowałeś zmienić stronę kodową w konsoli (o ile da się pod Windowsem)? U mnie pod Linuksem twój kod z pierwszego posta wymagał tylko "zakomentowania" system("pause"); i ruszył bez problemu znaki poprawnie wyświetlając

Wchodzę w Code::Blocks >> Settings >> Editor i tam mam ustawione Windows-1250.

0
SetConsoleCP(GetACP());
1

po kolei:

• sztuczka z setlocale(LC_ALL,"") działa pod Visual C++, nie działa pod GCC (Mingw, CodeBlock...).
• sztuczka SetConsoleCP czasami działa, ale:

#include <windows.h>
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());

i wymaga unicodowej czcionki w konsoli. na to nie masz za bardzo wpływu co ma użytkownik ustawione, więc ta metoda jest bezużyteczna.

• ustawienie kodowania pliku źródłowego na 852 zamiast 1250 definitywnie, nieinwazyjnie rozwiąże problem, jakkolwiek Revowi by się to nie podobało.

• jeśli już naprawdę nie przeżyjesz zapisania pliku "rodem z 1995", można konwertować tekst ręcznie:

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

int main(void)
{
    const char* napis = "Zażółć gęślą jaźń";
    char buff[256];
    CharToOemBuffA(napis, buff, sizeof(buff));
    printf("%s\n",buff);
    return 0;
}
1

Temat jest wysoko w google jak sie szuka rozwiązania wiec uzupełnię ;)

Dla Visual Studio 2010 i innych:
Przed kompliacją!

File -> Advanced Save Options...
Encoding: Central European (DOS) - Codepage 852

Taki Bonus: Dodatkowo jeśli ktoś chciałby mieć weryfikacje tablicy char, czy pojedynczej tablicy stringa czy składa się tylko z liter i polskich znaków warto poznać taką funkcje jak iswalpha(skladnik[c]) WAŻNE !! oczywiście po ówczesnym ustawieniu tego wyżej ;P

Myślę że rozwiąże to wiele problemów i szukania ^^ No tutaj temat jest masakryczny ale w content jest dużo zdań i slow "polskie znaki c++" co powoduje że ma 3 miejsce pod tą fraza :P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.