Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Polskie znaki w konsoli (C++)

Ostatnio zmodyfikowano 2013-06-05 23:35
Autor Wiadomość
dawidp
Temat założony przez niniejszego użytkownika
Polskie znaki w konsoli (C++)
» 2008-09-12 18:35:18
Niedawno zacząłem się uczyć C++ (niedawno czyli z jakieś pół godziny temu) i przy pierwszym programie typu "hello world" zamiast polskich znaków (takich jak ą ę ć ź itp) pojawiają mi się krzaczki takie jak np. w HTML-u. I w związku z tym mam pytanie następujące jak zrobić, aby pojawiały mi się normalne znaki. CZy nie trzeba czegoś wpisać tak jak w HTML-u?
P-1556
DejaVu
» 2008-09-12 18:43:44
Generalnie... wstawianie polskich znaczków jest uciążliwe:
1) Start/Uruchom
2) cmd
3) edit
4) wpisać polskie znaki tam gdzie chcesz mieć
5) zapisz
6) exit
7) otwórz plik
8) skompiluj
9) uruchom program

Jest też chyba możliwość zmiany kodowania... ale nie znam funkcji na chwilę obecną (pamiętam, że coś kiedyś na programowaniu pod linuxem temat był poruszony i pokazany, ale nie wiem czy jest on przenośny do Windowsa i nie pamiętam jak to się robiło).
P-1557
dawidp
Temat założony przez niniejszego użytkownika
» 2008-09-12 19:23:38
Dzięki za pomoc poszukam jeszcze o tej zmianie kodowania i jak znajdę to gdzieś tu wrzucę może komuś się to przyda.
P-1558
DejaVu
» 2008-09-13 17:38:04
Najlepszym rozwiązaniem z jakim się spotkałem na różnych forach to:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;

std::string PL( const char * text )
{
    std::string result;
    for(; * text; text++ )
    switch( * text )
    {
    case 'ą': result += static_cast < char >( 0xa5 ); break;
    case 'ć': result += static_cast < char >( 0x86 ); break;
    case 'ę': result += static_cast < char >( 0xa9 ); break;
    case 'ł': result += static_cast < char >( 0x88 ); break;
    case 'ń': result += static_cast < char >( 0xe4 ); break;
    case 'ó': result += static_cast < char >( 0xa2 ); break;
    case 'ś': result += static_cast < char >( 0x98 ); break;
    case 'ż': result += static_cast < char >( 0xbe ); break;
    case 'ź': result += static_cast < char >( 0xab ); break;
    case 'Ą': result += static_cast < char >( 0xa4 ); break;
    case 'Ć': result += static_cast < char >( 0x8f ); break;
    case 'Ę': result += static_cast < char >( 0xa8 ); break;
    case 'Ł': result += static_cast < char >( 0x9d ); break;
    case 'Ń': result += static_cast < char >( 0xe3 ); break;
    case 'Ó': result += static_cast < char >( 0xe0 ); break;
    case 'Ś': result += static_cast < char >( 0x97 ); break;
    case 'Ż': result += static_cast < char >( 0xbd ); break;
    case 'Ź': result += static_cast < char >( 0x8d ); break;
        default: result += * text; break;
    }
    return result;
}

int main()
{
    cout << PL( "ąćęłńóśżźĄĆĘŁŃÓŚŻŹ" ) << endl;
    getch();
    return 0;
}
P-1570
DejaVu
» 2008-09-14 14:48:08
Na MSDN'ie jest coś takiego: http://msdn.microsoft.com/en-us/library/ms686036(VS.85).aspx.

C/C++
BOOL WINAPI SetConsoleOutputCP(
__in UINT wCodePageID
);

Nie wiem jednak jak użyć tej funkcji abyś otrzymał efekt jaki Ciebie interesuje. Trzeba by było poczytać albo gdzieś indziej o tej funkcji, albo przeczytać dokładnie co jest napisane tutaj.

/edit:
Teoretycznie coś takiego powinno działać... ale nie działa :P
C/C++
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    SetConsoleCP( 852 );
    cout << "ąćęłńóśżźĄĆĘŁŃÓŚŻŹ" << endl;
    getch();
    return( 0 );
}

/edit2:
Teoretycznie poniższy kod też powinien działać... ale nie działa :)
C/C++
#include <locale.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    setlocale( LC_ALL, "pl_PL" );
    cout << "ąęćś" << endl;
    getch();
    return 0;
}
/edit3:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    wcout << L"ąćęłńóśżźĄĆĘŁŃÓŚŻŹ" << endl;
    getch();
    return( 0 );
}
Powyższy kod również powinien działać, ale nie działa pod Dev-C++ i Code::Blocks:
`wcout' undeclared (first use this function)
Być może ściągnięcie nowszego kompilatora z nagłówkami rozwziązałoby problem.
P-1578
dudek
» 2008-09-14 18:47:59
albo sciagniecie jakiegos enginu konsolowego:) swojego czasu gdzies na gamedev.pl widzialem cos takiego i domyslam sie ze taki engine powinien miec obsluge polskich znakow:)  ale glowy nie dam
P-1584
DejaVu
» 2013-06-05 23:35:33
Najlepsze znalezione rozwiązanie pod Windowsa: [C++] Unikodowe znaki w konsoli (Windows).
P-85019
« 1 »
  Strona 1 z 1