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ść... |
|
akwes |
» 2012-04-09 00:33:21 |
|
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... |
|
akwes |
» 2012-04-09 01:12:02 Skąd taki pomysł? Powiedz mi, co wypisuje na ekran Ci ten kod: #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(); }
|
|
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ą. |
|
akwes |
» 2012-04-09 01:18:42 wchar_t tekst_unikod[] = L "Tekst zakodowany w Unikodzie!!" ;
czyli 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: #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(); }
? |
|
nv20 Temat założony przez niniejszego użytkownika |
» 2012-04-09 01:23:06 wypisuje: " ??? " |
|
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. |
|
« 1 » |