boo33 Opublikowano 23 Grudnia 2004 Zgłoś Opublikowano 23 Grudnia 2004 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 ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 24 Grudnia 2004 Zgłoś Opublikowano 24 Grudnia 2004 { 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] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...