Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

TheDesertEagle

[C++] i fstream

Polecane posty

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

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

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

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



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...