Čeština v konzole aplikaci MS VS 2015 rubrika: Programování: C/C++
8
Tomáš Tintěra
položil/-a 7.11.2015
Jak dělat česky píšící programy v console app projektu v MS VS 2015?
Příklad: http://screencast.com/t/SonIQakl
#include "stdafx.h" #include <iostream> using std::cout; using std::endl; int main() { cout << endl << "Zapomněla vážení" << endl << endl; }
Vypíše: Zapomnýla vß×enÝ
Příklad číslo 2 - s použitím SetConsoleOutputCP http://screencast.com/t/qwJbCfHPDms
Příklad číslo 3: nejjednodušší funkční, dle linku od uetoyo.
Bez použití dalších/externích knihoven.
#include "stdafx.h" #include <stdexcept> #include <stdlib.h> #include <iostream> #include "windows.h" #include <io.h> // _setmode, _fileno #include <fcntl.h> // _O_U8TEXT using std::wcout; using std::wcerr; using std::endl; using std::wstring; using std::string; using std::runtime_error; using std::exception; bool throwX(string const& s) { throw runtime_error(s); } bool hopefully(bool v) { return v; } void setUtf8Mode(FILE* f, char const name[]) { int const newMode = _setmode(_fileno(f), _O_U8TEXT); hopefully(newMode != -1) || throwX(string() + "setmode failed for " + name); } int main() { try { static wchar_t const wideText[] = L"Přespříliš žluťoučký kůň úpěl ďábelské ódy."; setUtf8Mode(stdout, "stdout"); wcout << "Wide text: " << wideText << endl; return EXIT_SUCCESS; } catch (exception const& x) { wcerr << "!" << x.what() << endl; } return EXIT_FAILURE; }
Ukázka běhu: http://screencast.com/t/MIPn05kP8I
Díky všem za pomoc. C++ má opravdu řadu možností co a jak vypsat do konzole.
Ale jen výjimečně tím jde vypsat české znaky. Podobně asi i jiné neanglické.
Zřejmě je dobré používat mimo standardních i další knihovny. Viz odpovědi níže.
odkaz
Vyřešeno
4
xexperimente
odpověděl/-a 7.11.2015
upravil/-a 7.11.2015
Stačí použít spravnou funkci wcout
#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(1250); wcout << endl << "Zapomněla vážení" << endl << endl; getchar(); }
Komentáře
- Anonym : můj výstup: ZapomnÄ›la váženĂ — 7.11.2015
- xexperimente : Muj je spravný - v projektu nastaveno unicode, v nastaveni console truetype font a zdrojový soubor uložený v cp1250 kódování — 7.11.2015
- Tomáš Tintěra : S přepnutím konzole do Lucida console to vážně začne fungovat. Copy paste zachová diakritiku v pořádku bez ohledu na font. Ve standardním nastavení konzole vypadal výstup v Gilberish. http://screencast.com/t/lVV2aEo47wq. (VS 2015 @ W7_CZ) — 7.11.2015
- xexperimente : Ten rasterový font v sobě některé české znaky ani neobsahuje — 7.11.2015
- Tomáš Tintěra : @uetoyo Tenhle výstup nastane při uložení zdrojáku v UTF-8 bez BOM. MS Překladač má za to, že je v ANSI 1250, pokud je na stroji, kde probíhá překlad nastavena česká locale a nenajde BOM. (V kontrastu k vývojovému prostředí, které jej zobrazí správně). Portabilním řešením jsou zdrojáky v UTF-8 s BOM. — 7.11.2015
- Tomáš Tintěra : Po ukončení programu se správně vypsalo "Pokračujte stisknutím libovolné klávesy" i když mám zapnutá rastrová písma. Takže znaky 'ě', 'á' někdy/nějak umí. — 7.11.2015
- Anonym : @xexperimente: zprovozněno -- po kontrole jsem to také rozběhl -- ach ty Windows :) — 7.11.2015
- Tomáš Tintěra : JJ, danou otázku řeší jednodušším způsobem. Nicméně tohle je cesta k profi řešení. UTF-8 na vstupu i výstupu, jak na konzoli, tak do souboru. — 7.11.2015
Pro zobrazení všech 6 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře