Skocz do zawartości
boo33

Kody ASCI w Borland C++ 3.0

Rekomendowane odpowiedzi

Mam pytanie, uzywam Borlanda C++ 3.0. W stworzonym programie otwieram plik tekstowy do odczytu i wczytuje jego zawartosc i wyswietlam na ekranie. Tu pojawia sie problem, np. jak w pliku mam wpisane mężczyzna to na ekranie wypisuje mi m##czyzna, zamiast polskich znaków mam "krzaczki". Domyslam się ze jest cos nie tak z kodowaniem znakow. Czy ktos moglby powiedziec, jak rozwiazac ten problem ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

{

EDITO:

Hmm, sprawdziłem parę rzeczy i rozwiązaniem nie musi być tylko ustawienie locale...

 

Przede wszystkim kodowanie w pliku tekstowym musi odpowiadać kodowaniu ekranu, wtedy locale nie są potrzebne :>

Edytor tekstu nie musi zapisać akurat pliku w wymaganym przez nas kodowaniu... Warto jakiś konwerter zastosować albo edytor, w którym można wybrać kodowanie.

 

Za to jeśli użyjemy Unicode (np. UTF-8 ) [kodowanie UTF-8 użyte w pliku z danymi] to wtedy mamy więcej możliwości, np. konwersja między formatami kodowań, bo np. nasz plik tekstowy z danymi zapisany w CP-852 oczywiście źle będzie widoczny na CP-1250. Z Unicode nie będzie takiego problemu, a wyjście naszego programu może być przekonwertowane już na konkretną stronę kodową (czytaj: u każdego niezależnie od strony kodowej jego ekranu będą prawidłowe polskie literki).

 

Tak czy inaczej: narodowe znaczki i kodowanie może być cholernie ciężką sprawą...

}

Do rozwiązywania problemów lokalizacyjnych (język, waluta, format liczb, itd.) w C służy funkcja setlocale() z biblioteki <locale.h>; w C++ jest to klasa std::locale i pomocnicze (np. locale::facet) z <locale> [ale nie pytaj mnie jak się tego w C++ używa].

Ale obsługa języków i kodowań zależy już tylko od konkretniej biblioteki (czytaj producenta). Nie wiem jak to będzie z BC++ 3.0 sprzed kilkunastu lat...

Na początek spróbuj po prostu wywołać:

[php:1:4dc4b70805]

int main()

{

setlocale( LC_ALL, "" );

//....

}

[/php:1:4dc4b70805]

Albo ze specyfikacją języka i strony kodowej:

[php:1:4dc4b70805]

int main()

{

setlocale( LC_ALL, "polish_poland.852" ); // albo "polish_poland.1250" dla CP-1250

//....

}

[/php:1:4dc4b70805]

Domyślna strona kodowa zależy od Windowsa, oczywiście można ją zmienić.

Ustawienie locale ma wpływ na większość standardowych funkcji pobierających czy drukujących tekst, a także na kilka operujących na stringach [szczegóły w helpie do biblioteki].

Prawdziwie narodowy program powinien raczej używać Unicode (wchar_t, wprintf, itd.)[/b]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...