Problem z kodowaniem polskich znakw

Odpowiedz Nowy wątek
2012-04-10 11:56
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ę 'ć' ??

edytowany 1x, ostatnio: Rajder, 2012-04-10 11:56

Pozostało 580 znaków

2012-04-10 12:19
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.


!user image
I am the master of my fate. I am the captain of my soul.
edytowany 2x, ostatnio: Krycho, 2012-04-10 12:20
To, czy zwykły char jest signed czy unsigned zależy od kompilatora, więc nie zawsze będą miały ujemne wartości. - Afish 2012-04-11 08:03
Nie spotkalem sie jeszcze z kompilatorem, ktory char,int itd bez okreslonego signed/unsigned interpretowalby je jako unsigned sam z siebie, zawsze byly ze znakiem. No ale moze sa takie kompilatory. - Krycho 2012-04-11 09:47
W sumie też nie spotkałem się z takim kompilatorem, ale na SO mają odpowiedź na to pytanie: http://stackoverflow.com/ques[...]-which-takes-char-as-unsigned - Afish 2012-04-11 13:35

Pozostało 580 znaków

2012-04-10 12:59
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.

edytowany 2x, ostatnio: Rajder, 2012-04-10 13:01

Pozostało 580 znaków

2012-04-10 13:19
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 ;)


!user image
I am the master of my fate. I am the captain of my soul.

Pozostało 580 znaków

2012-04-10 13:31
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 :)

edytowany 1x, ostatnio: Rajder, 2012-04-10 13:32

Pozostało 580 znaków

2012-04-10 14:05
0

Domyslil bo mam to samo zadanie do zrobienia ;)


!user image
I am the master of my fate. I am the captain of my soul.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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