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

Kolejny banalny problem - char() dla unicode? Polskie znaki w konsoli?

Ostatnio zmodyfikowano 2012-04-09 01:32
Autor Wiadomość
nv20
Temat założony przez niniejszego użytkownika
Kolejny banalny problem - char() dla unicode? Polskie znaki w konsoli?
» 2012-04-09 00:23:26
Witam.
Zaczynam pisać w C++ i mam tego typu problem. Korzystam z pakietu MS Visual Studio 2010. Chciałbym, aby mój program wyświetlał w konsoli polskie znaki, ale jednocześnie chciałbym zrobić tabelkę (korzystając ze znaków typu ║ ). Wszystko byłoby ok - po zmianie strony kodowej na 852 mam i tabelkę i polskie znaki, jednak przy zapisywaniu projektu, znaki w edytorze są wyświetlane niepoprawnie. Próbowałem zmieniać lokalizację (dla Unicode) - tabela wyświetla się nie tak jak powinna. Moje pytanie jest takie: czy jest jakaś funkcja, która wyświetlałaby mi w konsoli znak którego kod podam? Tj.: tak, jak normalnie działa char(186), to czy jest coś, co wyświetli mi znak dla 0x2551. Ewentualnie, czy istnieje jakieś inne, lepsze rozwiązanie mojego problemu? Nie wiem... Można w jakiś sposób ustawić, aby VS zapisywało plik źródłowy w Unicode, a kompilowało używając już DOS (852)?

Z góry dzięki za pomoc... Siedzę nad tym już drugi dzień i zaczynam mieć dość...
P-54132
akwes
» 2012-04-09 00:33:21
Poszukać na forum nie łaska?
Polskie znaki w konsoli
P-54133
nv20
Temat założony przez niniejszego użytkownika
» 2012-04-09 01:08:53
Oczywiście, że szukałem, bez tego bym nie napisał.

W temacie, który mi podesłałeś są pokazane dwa rozwiązania - zmiana lokalek, jak mówiłem, nie działa dla mnie (ramki). Pierwszy sposób - nie do końca rozumiem... Nie potrafię tego zaimplementować do mojego programu. Za każdym razem gdy używam L po zadeklarowaniu zmiennej - kompilator wywala się, bo zmienna L nie jest zadeklarowana (??)

  wchar_t tekst[1]=L;
  tekst[ 1 ]=261;  //?
  cout<<tekst;

  wchar_t tekst[1];
  tekst[ 1 ]=261; //?
  cout<<tekst;

Próbowałem rozwiązać to wszystko przez np. wchar_t(261) ale niestety też w żaden sposób to nie działa...
P-54134
akwes
» 2012-04-09 01:12:02
C/C++
wchar_t tekst[ 1 ] = L;
Skąd taki pomysł?

Powiedz mi, co wypisuje na ekran Ci ten kod:

C/C++
#include <iostream>
#include <locale>
using namespace std;

int main()
{
    locale loc( "" );
    locale::global( loc );
    cout.imbue( loc );
    cin.imbue( loc );
    char buf[ 16 ];
    cout << "ąś ";
    cin.getline( buf, 16 );
    cin.sync();
    cin.get();
}
P-54135
nv20
Temat założony przez niniejszego użytkownika
» 2012-04-09 01:17:30
Stworzyłem zmienną dla dwóch znaków ( [1] ), użyłem L zgodnie z:

[quote]Jak pewnie zauważyliście po znaku = lecz przed wpisaniem właściwego tekstu w "" postawiłem dużą literę L. Otóż już wyjaśniam: służy ona do konwersji z ASCII do Unicode.[/quote]

Tak jak mówiłem, dopiero zaczynam swoją przygodę z C++... Domyślam się, że to co napisałem jest kompletną bzdurą. ;-)

Edit:
tak, wypisuje "ąś". Problem jest z ramką.
P-54136
akwes
» 2012-04-09 01:18:42
C/C++
wchar_t tekst_unikod[] = L
"Tekst zakodowany w Unikodzie!!"
;

czyli

C/C++
wchar_t tekst_unikod[] = L"Tekst zakodowany w Unikodzie!!";

Powiedz mi czy działa Ci kod, który podałem we wcześniejszym poście.

//edit

No, a ten kod:

C/C++
#include <iostream>
#include <locale>
using namespace std;

int main()
{
    locale loc( "" );
    locale::global( loc );
    cout.imbue( loc );
    cin.imbue( loc );
    char buf[ 16 ];
    cout << "║║║";
    cin.getline( buf, 16 );
    cin.sync();
    cin.get();
}

?
P-54137
nv20
Temat założony przez niniejszego użytkownika
» 2012-04-09 01:23:06
wypisuje: " ??? "
P-54138
akwes
» 2012-04-09 01:32:14
http://stackoverflow.com/questions/2849010/output-unicode-to-console-using-c

Still, as Adrian pointed out, this doesn't address the fact cmd, by default, doesn't handle Unicode outputs. This can be addressed by manually configuring the console, like described in Adrian's answer:

Starting cmd with the /u argument;
Calling chcp 65001 to change the output format;
And setting a unicode font in the console (like Lucida Console Unicode).

Tutaj piszą, że CMD domyślnie nie obsługuje Unicode. Są też rady jak temu zapobiec.
P-54139
« 1 »
  Strona 1 z 1