TheDesertEagle Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 Kiedy próbuję wczytać do programu tekst z polskimi znakami (tekst1.txt) np: #include<iostream> #include<fstream> using namespace std; int main() { ifstream p1; char znak; p1.open("tekst1.txt"); do {p1>>znak; cout<<znak<<endl; }while(p1); p1.close(); lub zapisać do pliku tekst (tekst2.txt) zawierający jakieś znaki diakrytyczne np: ofstream p2; p2.open("tekst2.txt") p2<<"\217 \206 \235 \210 \227 \230 \340 \242 \244 \245 \250 \251 \215 \253 \275 \276 \343 \344"; p2.close(); return 0; } to na ekranie konsoli i w pliku pojawia mi się takie coś: Ź ? ť ? ŕ ˘ ¤ Ą ¨ ? Ť ? ˝ ľ ă ä Co mam zrobić aby fstream zaczął mi poprawnie wczytywać/zapisywać? Dodam że ścieżki dostępu do pliku mogą zawierać znaki narodowe, podobnie wczytywanie ich do string i do char przez cin>> działa mi bez żadnych problemów dla wszystkich symboli. Link do komentarza Udostępnij na innych stronach More sharing options...
Herobrine Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 może spróbuj zapisać plik jako UTF8 ? Link do komentarza Udostępnij na innych stronach More sharing options...
TheDesertEagle Napisano Wrzesień 27, 2011 Autor Zgłoś Share Napisano Wrzesień 27, 2011 może spróbuj zapisać plik jako UTF8 ? Zależy mi żeby program wczytywał wszystkie pliki tekstowe..... Nie można jakoś dostosować kodowania czy coś w tym rodzaju? Poza tym zapisanie w UTF8 też nic nie daje. Dodam że używam kompilatora Dev-C++ IDE 4.9.9.2. Link do komentarza Udostępnij na innych stronach More sharing options...
hixohe Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 Sprawdź jaką masz ustawioną stronę kodową. Żeby to zrobić (zakładam, że to windows) uruchom konsole i wpisz chcp. Link do komentarza Udostępnij na innych stronach More sharing options...
TheDesertEagle Napisano Wrzesień 27, 2011 Autor Zgłoś Share Napisano Wrzesień 27, 2011 Sprawdź jaką masz ustawioną stronę kodową. Żeby to zrobić (zakładam, że to windows) uruchom konsole i wpisz chcp. Jeśli to ważne to tak kompiluję to na XP. A strona kodowa to: 852. Link do komentarza Udostępnij na innych stronach More sharing options...
Herobrine Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 Debuguj, dodaj linie do programu która odczyta ci kod znaku który wczytujesz i wtedy będziesz wiedział czy odczytuje ci poprawny znak czy to problem z kodowaniem czy jeszcze z czymś innym. Link do komentarza Udostępnij na innych stronach More sharing options...
TheDesertEagle Napisano Wrzesień 27, 2011 Autor Zgłoś Share Napisano Wrzesień 27, 2011 Debuguj, dodaj linie do programu która odczyta ci kod znaku który wczytujesz i wtedy będziesz wiedział czy odczytuje ci poprawny znak czy to problem z kodowaniem czy jeszcze z czymś innym. Tylko jakim poleceniem odczytać kod wczytywanego znaku? Link do komentarza Udostępnij na innych stronach More sharing options...
hixohe Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 Problem to różnice w kodowaniu. Jak już sprawdziłeś wcześniej Twoja konsola używa domyślnie kodowania cp852 natomiast Twój edytor prawdopodobnie kodowania cp1250 (nie jestem pewien). Jeśli chcesz tylko wczytać tekst i go wyświetlić, to najprostszą rzeczą jaka przychodzi mi do głowy będzie napisanie funkcji, która będzie zamieniać kod znaku z jednego kodowania na drugi. Zapisać do pliku da się bez problemu, jeśli użyjesz odpowiedniego kodu danej litery. Spróbuj na początku wpisać zwyczajnie w devie polskie znaki. W sensie: plikwyjsciowy << "ęęęęśćśćść" << endl; Jeśli to nie zadziała wtedy kombinuj z kodami znaków. Żeby sprawdzić jaki kod ma dana litera/znak musisz użyć rzutowania char na inta. Link do komentarza Udostępnij na innych stronach More sharing options...
TheDesertEagle Napisano Wrzesień 27, 2011 Autor Zgłoś Share Napisano Wrzesień 27, 2011 plikwyjsciowy << "ęęęęśćśćść" << endl; Wysyłanie do pliku w ten sposób działa, pozostaje tylko problem wczytywania znaków z pliku i wyświetlania ich, kiedy tak robię dalej wyświetlają mi się dziwne symbole Link do komentarza Udostępnij na innych stronach More sharing options...
hixohe Napisano Wrzesień 27, 2011 Zgłoś Share Napisano Wrzesień 27, 2011 Podałem Ci jedno z rozwiązań. 1. Pobierasz tekst, 2. Konwertujesz na odpowiednie kodowanie - sprawdzasz kod kazdego znak po kolei - jesli kod danego znaku odpowiada powiedzmy literce "ś" w pierwotnym kodowaniu podstawiasz kod litery "ś" w drugim kodowaniu - tak przerobiony string wyswietlasz w konsoli Link do komentarza Udostępnij na innych stronach More sharing options...
TheDesertEagle Napisano Wrzesień 28, 2011 Autor Zgłoś Share Napisano Wrzesień 28, 2011 Podałem Ci jedno z rozwiązań. 1. Pobierasz tekst, 2. Konwertujesz na odpowiednie kodowanie - sprawdzasz kod kazdego znak po kolei - jesli kod danego znaku odpowiada powiedzmy literce "ś" w pierwotnym kodowaniu podstawiasz kod litery "ś" w drugim kodowaniu - tak przerobiony string wyswietlasz w konsoli Rozumiem i dziękuję. Jak będę miał wolną chwilę i napiszę to wstawię tutaj kod. Może się komuś przyda. Link do komentarza Udostępnij na innych stronach More sharing options...