Ahoj,
potřeboval bych radu týkající se kódování v C++. Nějaký způsob jak v konzolových aplikacích pracovat s textem s českými znaky. Nevím jestli mám používat string / wstring, ifstream / wifstream, cout / wcout atd nebo nastavovat setlocale, mám v tom strašný zmatek.
Když dělám s českými znaky, tak v/v souboru mi funguje (soubor musí být ANSI), a při výstupu do konzoly musím volat CharToOemA (v souboru windows.h). Nefungují mi ale funkce jako toupper nebo isaplha atd. A taky jak pracovat třeba s UTF-8 souborem? A také jestli existuje přenositelné řešení (není nutné, spokojím se i s řešením pro Win, bylo by to ale "čistější").
Hlavně potřebuji načíst textový soubor a používat funkce jako tolower a isaplha atd., tak aby pracovaly i s čes. znaky).
Dělám na Visual Studiu 2008.
Předem díky
Fórum › C / C++
Čeština v C++
v linuxu to jde snadno...
ve win musis pouzit tusim SetConsoleCP a asi i SetConsoleOutputCP + nastavit u prikazovky truetype font.. s defaultnim to jde jen s tusim cp 952
ty dalsi funkce sou pak taky trochu zavisle na locale.. ale nejak sem to nikdy nepotreboval mozna pouzit ty wide character verze
Ve visual studiu by mělo fungovat
#include <iostream>
#include <clocale>
#include <locale>
int main()
{
std::setlocale(LC_ALL, "");
std::wcout.imbue(std::locale(""));
std::wcout << L"ěščřžýáíé\n";
}
Díky moc, už mi funguje vše jak sem potřeboval.
#include <iostream>
#include <locale>
int main()
{
std::locale cz("Czech");
std::locale::global(cz);
//std::cout.imbue(cz);
//std::cin.imbue(cz); // tyto prikazy jen umozni psat des. carku misto tecky
std::cout << "ěščřžýáíéůúňďť";
std::wcout << L"ěščřžýáíéůúňďť";
}
V pohodě funguje i čtení a zápis do souboru, jen pokud chci načíst text z konzole, tak to načítá nesmyslné znaky. Podařilo se mi to opravit pomocí SetConsoleCP(1250) a SetConsoleOutputCP(1250) (ze souboru windows.h) - funguje i pak čtení z konzole, ale musí se nastavovat písmo v konzoli, není nějaký lepší způsob (a přenositelný)?
A pak ještě jedna věc: Jak porovnám řetězce, tak aby 'c' < 'č' < 'd' atd.?
To vdolek : prenositelnost jedine pomoci #ifdef.. jako kdyz je to __WIN32 nebo tak nejak ... pripadne linux..
porovnavani musis udelat jedine sam.. nebo sehnat nejake knihovny..
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 101 hostů
Podobná vlákna
S.w.i.n.e - čeština — založil ondy13
Čeština v C++ — založil Pavel Szabo
MSSQL a cestina — založil Petr sejn
Moderátoři diskuze