Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] [fstream] Wczytanie wstringa z pliku

Ostatnio zmodyfikowano 2013-12-13 14:11
Autor Wiadomość
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.
P-91306
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:
C/C++
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
P-98957
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.
P-98964
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ć)
P-98990
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?
P-98995
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:)
P-99013
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).
P-99061
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.
P-99066
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona