Problem z kodowaniem polskich znakw

0

Witajcie.
Mam następujący problem: muszę napisać program, w którym muszę odczytać dany znak z pliku, a następnie zamienić go do postaci binarnej. Problem mój polega na tym, że odczytywany znak, reprezentujący polską literę z pliku ma inny kod ASCII niż ten wpisywany z konsoli (problem dotyczy tylko polskich znaków, dla reszty wszystko działa jak należy)
Oto kod pokazujący problem:

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{

    //inicjalizacja zmiennej polskim znakiem
    char znak = 'ć';
    cout<<"Polska litera przypisana zmiennej: "<<znak<<"  jej kod ASCII: "<<(int)(znak)<<endl;


    //odczyt znaku z kosoli
    char znak2;
    cout<<"Podaj znak: ";
    cin>>znak2;
    cout<<"Polska litera odczytana z konsoli: "<<znak2<<"  jej kod ASCII: "<<(int)(znak2)<<endl;


    //odczyt znaku z pliku
    ifstream plik;
    char znak3;
    plik.open("plik.txt");
    plik>>znak3;
    cout<<"Polska litera odczytana z pliku: "<<znak3<<"  jej kod ASCII: "<<(int)(znak3)<<endl;


    system("pause");
    return 0;

}
 

A oto rezultat wykonania programu:

Polska litera przypisana zmiennej: Š  jej kod ASCII: -26
Podaj znak: ć
Polska litera odczytana z konsoli: ć  jej kod ASCII: -122
Polska litera odczytana z pliku: Š  jej kod ASCII: -26
Aby kontynuować, naciśnij dowolny klawisz . . . 

Dlaczego tylko przy odczycie z konsoli otrzymuje prawidłowy polski znak, a przy wyświetlaniu zmiennej, której na sztywno przypisałem literę 'ć' wyświetla się znak 'Š' i to samo dla pliku, w którym zapisałem literę 'ć' ??

1
setlocale(LC_ALL, "Polish");

Ps. Polskie znaki maja numery powyzej 127 tzw. extended ascii code, wiec lepiej byloby to zapisac na unsigned charze, ale na zwyklym tez pojdzie po prostu beda mialy ujemne wartosci.

0

Dziękuję Ci bardzo :)
Tylko hehe teraz nie działa dla konsoli :P
Jak wpisuje polski znak z konsoli to jego źle wyświetla, a dla pliku i sztywnego przypisania działa jak należy, więc za to dziękuję bardzo.

0

Wczytywanie chyba trzeba sie bawic przez wcin i wcout. To do zadania z telekomunikacji! jest niepotrzebne tam jedynie operuje sie na danych z pliku ;)

0

No proszę jak się domyślił :D No wiem wiem ale tak się tylko zastanawiałem, w każdym razie problem rozwiązany :)
BTW. program już działa jak należy :)

0

Domyslil bo mam to samo zadanie do zrobienia ;)

0 użytkowników online, w tym zalogowanych: 0, gości: 0