Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa

Darmowa diagnoza laptopa

Dojazd do klienta bezpłatnie

Dojazd do klienta bezpłatnie

Laptopy zastępcze bezpłatnie

Laptopy zastępcze bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Błąd przy zmianie kodowania (chcp)

Termin Definicja
Błąd przy zmianie kodowania (chcp)

Błąd przy zmianie kodowania poleceniem `chcp` oznacza podanie strony kodowej nieobsługiwanej przez aktualną czcionkę konsoli — znaki spoza zakresu ASCII mogą wyświetlać się jako krzaki mimo poprawnie wykonanego polecenia.

Błąd przy zmianie kodowania (chcp) – na czym polega

Błąd przy zmianie kodowania za pomocą polecenia chcp pojawia się wtedy, gdy środowisko wiersza polecenia nie potrafi prawidłowo zastosować wybranej strony kodowej do sposobu wyświetlania tekstu. Sama komenda może zostać przyjęta przez system bez komunikatu o niepowodzeniu, ale znaki diakrytyczne, symbole używane w nazwach plików albo treść odczytywana z programu mogą nadal wyglądać nieprawidłowo. W efekcie pojawiają się przypadkowe znaki, puste pola, znaki zapytania lub ciągi, które utrudniają odczyt komunikatów.

Nie jest to zawsze błąd samego polecenia. Na końcowy rezultat wpływają jednocześnie ustawienia konsoli, czcionka, sposób zapisu pliku, język programu oraz metoda przekazywania danych. Inaczej może zachowywać się tekst wpisany bezpośrednio w oknie terminala, inaczej wynik programu uruchomionego z pliku wsadowego, a jeszcze inaczej dane zapisane w pliku tekstowym. Z tego powodu prawidłowa diagnoza wymaga sprawdzenia całego łańcucha: źródła tekstu, kodowania danych, powłoki i urządzenia, na którym tekst jest wyświetlany.

Strony kodowe, czcionka konsoli i współczesne kodowanie tekstu

Polecenie chcp służy do odczytania lub ustawienia strony kodowej używanej przez bieżącą konsolę. Można użyć go między innymi w postaci chcp, aby sprawdzić aktualną wartość, albo chcp numer, aby przełączyć środowisko na inną stronę. Zmiana dotyczy przede wszystkim sposobu interpretowania bajtów przez programy korzystające z konsoli. Nie przepisuje automatycznie zawartości istniejących plików i nie naprawia danych, które zostały wcześniej zapisane w niewłaściwym formacie.

W starszych aplikacjach często spotyka się strony kodowe oparte na ograniczonych zestawach znaków, podczas gdy nowsze narzędzia zazwyczaj wykorzystują Unicode, najczęściej w postaci UTF-8 albo UTF-16. Samo przełączenie strony kodowej może więc pomóc tylko wtedy, gdy wszystkie elementy korzystające z tekstu oczekują zgodnego formatu. Jeżeli jeden program wysyła dane w UTF-8, a drugi odczytuje je tak, jakby pochodziły z innej strony kodowej, powstaje niespójność. Podobny efekt może wystąpić, gdy czcionka konsoli nie zawiera potrzebnych glifów.

Warto rozróżnić kilka sytuacji:

  • tekst jest zapisany poprawnie, lecz konsola interpretuje bajty według niewłaściwej strony kodowej;
  • konsola działa z właściwą stroną kodową, ale użyta czcionka nie ma odpowiednich znaków;
  • plik wejściowy został już zapisany z błędną interpretacją i późniejsza zmiana ustawień nie odtworzy pierwotnej treści;
  • program wymusza własny sposób kodowania niezależnie od ustawień bieżącego okna;
  • kodowanie wyjścia, wejścia i komunikacji między procesami nie jest takie samo.

Typowe przyczyny nieprawidłowego działania chcp

Jednym z częstych źródeł problemu jest mylenie strony kodowej konsoli z kodowaniem pliku. Wpisanie właściwej wartości po chcp nie zmieni formatu skryptu, dokumentu ani eksportu wygenerowanego wcześniej przez aplikację. Jeżeli plik wsadowy został zapisany w innym kodowaniu niż to, którego oczekuje uruchamiające go środowisko, polskie znaki mogą być zniekształcone jeszcze przed wykonaniem właściwego polecenia.

Problematyczne bywają również polecenia uruchamiane w różnych powłokach. Klasyczny interpreter poleceń, PowerShell oraz narzędzia uruchamiane z poziomu środowisk programistycznych mogą inaczej obsługiwać wejście i wyjście tekstowe. To samo polecenie może zatem zwracać czytelny wynik w jednym miejscu i uszkodzony tekst w innym. Dodatkowo ustawienia terminala mogą być zmieniane przez skrypt startowy, konfigurację profilu użytkownika albo program, który otwiera nowe okno konsoli.

Do objawów mogą prowadzić także:

  • użycie strony kodowej niezgodnej z językiem danych wyświetlanych w konsoli;
  • brak glifów dla wybranych znaków w aktualnie ustawionej czcionce;
  • przekierowanie wyniku do pliku, którego kodowanie jest inne niż kodowanie terminala;
  • łączenie programów o odmiennych założeniach dotyczących kodowania standardowego wejścia i wyjścia;
  • uruchamianie skryptu z innymi zmiennymi środowiskowymi niż podczas testu wykonywanego ręcznie;
  • uszkodzone ustawienia profilu powłoki lub nietypowa konfiguracja regionalna systemu;
  • zależność programu od starszych mechanizmów obsługi znaków, mimo że dane pochodzą ze współczesnego źródła.

Przy sprawdzaniu problemu pomocne jest porównanie wyniku kilku prostych testów: wyświetlenia aktualnej strony kodowej, wpisania tekstu zawierającego polskie znaki, zapisania wyniku do pliku oraz odczytania tego pliku w narzędziu świadomym jego kodowania. Należy również ustalić, czy zniekształcenie występuje już w źródle, czy dopiero w momencie prezentacji. Taka kolejność ogranicza ryzyko zmiany wielu ustawień naraz i utraty informacji o rzeczywistej przyczynie.

Kiedy warto umówić wizytę serwisową - Błąd przy zmianie kodowania (chcp)

Zgłoszenie do serwisu jest uzasadnione, gdy błędne znaki pojawiają się w wielu programach, ustawienia konsoli samoczynnie wracają do nieprawidłowych wartości, skrypty przestają działać po zmianie środowiska albo nie da się ustalić, czy uszkodzenie dotyczy pliku, powłoki czy systemu. Szczególnej uwagi wymaga sytuacja, w której problem współwystępuje z zawieszaniem się aplikacji, błędami dysku, nieoczekiwanym zamykaniem terminala lub utratą treści w plikach.

W ramach Warszawskiego Pogotowia Komputerowego 24/7 można zlecić sprawdzenie ustawień systemu, powłoki, czcionek oraz sposobu zapisu i odczytu plików; przy zgłoszeniach dotyczących laptopa dostępna jest darmowa diagnoza LAPTOPA. Podczas analizy można ustalić, czy wystarczy uporządkowanie konfiguracji kodowania, poprawienie skryptu, zmiana ustawień terminala, czy też potrzebne jest szersze sprawdzenie systemu i nośnika danych.

Przed przekazaniem urządzenia warto zanotować dokładny komunikat, polecenie wywołujące problem, nazwę używanej powłoki oraz przykład tekstu, który zostaje wyświetlony niepoprawnie. Pomocne jest także wskazanie, czy błąd występuje po każdym uruchomieniu, tylko w konkretnym programie, czy dopiero po przekierowaniu wyniku do pliku. Tak zebrane informacje ułatwiają odtworzenie sytuacji i pozwalają dobrać rozwiązanie bez przypadkowego zmieniania ustawień, które działają prawidłowo.