tak jak mowilem kod jest mniej-wiecej.. aktualnie probuje przygotowac poprawny przyklad..
przykaldowo:
#include <iostream>
#include <locale>
#include <string>
int main()
{ using namespace std;
cout.imbue(locale("pl_PL"));
string name = cout.getloc().name();
cout << "locale=" << name << endl;
string napis = "zażółć gęślą jaźń";
cout << napis.size() << endl;
cout << napis << endl;
return 0;
}
na gcc/G++: gcc version 3.3.6 (PLD Linux) tworzy wyjscie:
locale=pl_PL
17
zażółć gęślą jaźń
a wiec idealnie: 17 znakow w stringu, napis wypisany.. jesli wypisze krzaki - to znaczy ze system nieprawilowo obsluguje pl_PL ---- acz wtedy powinien rzucic wyjatkiem podczas imbue(locale("pl_PL
natomiast uparlem sie z widestringami..:
#include <iostream>
#include <locale>
#include <string>
int main()
{ using namespace std;
wcout.imbue(locale("pl_PL"));
string name = wcout.getloc().name();
cout << "locale=" << name << endl;
wstring napis = L"zażółć gęślą jaźń";
wcout << napis.size() << endl;
wcout << napis << endl;
if(!wcout){wcout.clear();wcout << "streamput failed" <<endl;}
return 0;
}
wyrzuca:
locale=pl_PL
17
zastreamput failed
i do prawdy nie wiem czemu.. widestring ma tez 17 znakow, czyli nic nie zostalo uciele. natomiast proba wrzucenia znaku L'ż' na wcout, powoduje wejscie w stan FAIL.. no i na razie na tym fakcie utknalem. w kazdym badz razie jak widac sam wstring dziala - problem za pewne lezy w ustawieniu locale i charsetu