Wasilek Temat założony przez niniejszego użytkownika |
» 2013-08-31 07:59:10 Ok, to jak będę miał wolny czas to zajmę się tą sprawą :) Napiszę też czy pomogło. |
|
Wasilek Temat założony przez niniejszego użytkownika |
» 2013-12-11 00:09:47 Taki mój mały odkop :P Dopiero dzisiaj mogłem się zająć tą sprawą :) Rozwiązaniem problemu jest zapisywanie plików w kodowaniu ANSCII oraz dodaniu takiej funkcji: void ansciiToWide( wstring & tekst ) { for( unsigned int i = 0; i < tekst.length(); i++ ) { switch( static_cast < int >( tekst[ i ] ) ) { case 185: tekst[ i ] = L'ą'; break; case 230: tekst[ i ] = L'ć'; break; case 234: tekst[ i ] = L'ę'; break; case 179: tekst[ i ] = L'ł'; break; case 241: tekst[ i ] = L'ń'; break; case 243: tekst[ i ] = L'ó'; break; case 156: tekst[ i ] = L'ś'; break; case 159: tekst[ i ] = L'ź'; break; case 191: tekst[ i ] = L'ż'; break; case 165: tekst[ i ] = L'Ą'; break; case 198: tekst[ i ] = L'Ć'; break; case 202: tekst[ i ] = L'Ę'; break; case 163: tekst[ i ] = L'Ł'; break; case 209: tekst[ i ] = L'Ń'; break; case 211: tekst[ i ] = L'Ó'; break; case 140: tekst[ i ] = L'Ś'; break; case 143: tekst[ i ] = L'Ź'; break; case 175: tekst[ i ] = L'Ż'; break; } } }
Mam nadzieję, że komuś to pomoże :P |
|
Adik80 |
» 2013-12-11 11:56:43 A to nie jest tak ze myslisz UTF8 z UCS2? UCS2 mowi ze kazda litera zajmuje dokladnie 2 bajty, UTF8 mowi o tym ze literki beda przechowywane jako adresy w codepagu, i o ile sie da beda upychane w systemie 8bitowym. Caloscia zajmuje sie system, wiec o ile masz dobrze ustawiona strode kodowa, to takie cos powinno zadzialac:
std::string stringg = "Zażółć gęślą jaźń"; std::ostream o; o.open("test"); o<<stringg; o.close(); std::ifstream i; i.open("test"); std::string s; std::getline(i,s); std::cout<<s;
jesli chcesz wymusic jakies inne kodowanie to mozesz to zrobic przez fstream::imbue. |
|
Wasilek Temat założony przez niniejszego użytkownika |
» 2013-12-11 17:26:03 Niestety nie ma tak łatwo :) Siedziałem z tym problemem wystarczająco długo, aby przetestować wiele różnych kombinacji i nic innego nie zadziałało :) W twoim kodzie std::string stringg = "Zażółć gęślą jaźń"; stringg nie będzie przechowywał tego tekstu. Bez L" ". Natomiast po dodaniu L oczywiście nie uda się skompilować programu (wchar_t do char nie da się przypisać) |
|
Adik80 |
» 2013-12-11 19:16:50 Przez ciekawosc, mozesz wkleic kawalek kodu, napisac czym to kompilujesz i czym objawia sie to ze string nie przechowa tego textu? |
|
Wasilek Temat założony przez niniejszego użytkownika |
» 2013-12-11 21:22:23 Kod taki sam jak zamieściłeś. Kompilator gcc 4.7.1. Objawia się tym, że wyświetlane są błędne znaki, a jest to spowodowane tym, że poszczególne znaki mają ujemne wartości:) |
|
Adik80 |
» 2013-12-12 17:23:49 Nie wiem czemu ale moja wczesniejsza odpowiedz sie nie zapisala. polskie znaki sa w extenede codes, dlatego maja wartosc ujemna, ale skoro ci sie program skompilowal tzn ze jest ok. Problem raczej jest z wyswietleniem, jesli uzywasz linuxa to sprawdz czy konsola ma odpwoiednio ustawione locale i kodowanie, oraz ma odpowiednia czcionke. Ja sprawdzilem pod gcc4.4 xterm i gnome-termianl i u mnie dziala. Pod windowsem powinienes miec codepage 1250 (np. wywolujac system("chcp 1250"), lub SetCOnsoleOutputCP(1250), i czcionka lucian console (czy jakos tak). |
|
Wasilek Temat założony przez niniejszego użytkownika |
» 2013-12-12 19:33:44 Według tej strony http://www.ascii-code.com/ w extended ASCII nie ma polskich znaków (oprócz 'ó'). Na windowsie po dodaniu tych funkcji o których wspomniałeś, nic się nie zmieniło. |
|
1 « 2 » 3 |