TheDesertEagle Posted September 27, 2011 Report Share Posted September 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 to comment Share on other sites More sharing options...
Herobrine Posted September 27, 2011 Report Share Posted September 27, 2011 może spróbuj zapisać plik jako UTF8 ? Link to comment Share on other sites More sharing options...
TheDesertEagle Posted September 27, 2011 Author Report Share Posted September 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 to comment Share on other sites More sharing options...
hixohe Posted September 27, 2011 Report Share Posted September 27, 2011 Sprawdź jaką masz ustawioną stronę kodową. Żeby to zrobić (zakładam, że to windows) uruchom konsole i wpisz chcp. Link to comment Share on other sites More sharing options...
TheDesertEagle Posted September 27, 2011 Author Report Share Posted September 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 to comment Share on other sites More sharing options...
Herobrine Posted September 27, 2011 Report Share Posted September 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 to comment Share on other sites More sharing options...
TheDesertEagle Posted September 27, 2011 Author Report Share Posted September 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 to comment Share on other sites More sharing options...
hixohe Posted September 27, 2011 Report Share Posted September 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 to comment Share on other sites More sharing options...
TheDesertEagle Posted September 27, 2011 Author Report Share Posted September 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 to comment Share on other sites More sharing options...
hixohe Posted September 27, 2011 Report Share Posted September 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 to comment Share on other sites More sharing options...
TheDesertEagle Posted September 28, 2011 Author Report Share Posted September 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 to comment Share on other sites More sharing options...