Jak rozpoznać krzaczenie się polskich znaków

; kategorie: informatyka

UPDATE: Napraw swój pokrzaczony tekst.

Jak wyglądają pokrzaczone polskie znaki, to chyba widział każdy, kto używał komputera dłużej niż od wczoraj. Ale krzaczenie się było zazwyczaj tylko informacją, że coś jest nie tak. Tylko nieliczni potrafili, zobaczywszy na przykład „Pchn±æ w tê ³ód¼ je¿a i o¶m skrzyñ fig.”, powiedzieć „A, to jest iso-8859-2 interpretowane jako iso-8859-1.”

Dzisiaj usiadłem i napisałem skrypt, który przegląda najpopularniejsze kodowania i pokazuje, jak wygląda każda kombinacja interpretacji polskich znaków.

W ostatniej kolumnie widać, czy podczas przetwarzania nie wystąpiły jakieś błędy, na przykład napis w kodowaniu iso-8859-2 nie jest poprawnym napisem w utf-8.

Prawdziwe Wzięte za Wygląda tak… ok?
utf-8 utf-8 Pchnąć w tę łódź jeża i ośm skrzyń fig. ok
utf-8 iso-8859-2 PchnÄ?Ä? w tÄ? Ĺ?ĂłdĹş jeĹźa i oĹ?m skrzyĹ? fig. ok
utf-8 iso-8859-1 PchnÄ?Ä? w tÄ? Å?ódź jeża i oÅ?m skrzyÅ? fig. ok
utf-8 cp1250 Pchnąć w tę łódź jeża i ośm skrzyń fig. ok
iso-8859-2 utf-8 Pchn w t d jea i om skrzy fig. ERR
iso-8859-2 iso-8859-2 Pchnąć w tę łódź jeża i ośm skrzyń fig. ok
iso-8859-2 iso-8859-1 Pchn±æ w tê ³ód¼ je¿a i o¶m skrzyñ fig. ok
iso-8859-2 cp1250 Pchn±ć w tę łódĽ jeża i o¶m skrzyń fig. ok
cp1250 utf-8 Pchn w t d jea i om skrzy fig. ERR
cp1250 iso-8859-2 Pchnšć w tę łód? jeża i o?m skrzyń fig. ok
cp1250 iso-8859-1 Pchn¹æ w tê ³ód? je¿a i o?m skrzyñ fig. ok
cp1250 cp1250 Pchnąć w tę łódź jeża i ośm skrzyń fig. ok

Miejmy nadzieję że dzięki unicode takie problemy będą stopniowo odchodziły w niepamięć, ale założę się że mamy przed sobą jeszcze niejedną migrację MySQL albo inną niewyraźną operację która może zamienić nasze narodowe znaki w bezkształtną papkę.

Ten skrypt pokazuje tylko jeden etap krzaczenia. Prawdziwa przygoda zaczyna się, kiedy mamy polskie znaki pokrzaczone nie jedno-, ale dwukrotnie!

Komentarze

  • Crash (2008-03-08 17:07:55):

    iso-8859-1iso-8859-1Pchn w t ód jea i om skrzy fig.ERR

    Innymi słowy: albo moja przeglądarka nie interpretuje iso-8859-1, albo tekst w *-1 interpretowany jako tekst w *-1 nie wyświetla polskich znaków.

  • Automaciej (2008-03-08 17:09:11):

    Crash: W zasadzie, to tych wierszy nie powinno być w tabelce, bo ten napis nie może być przedstawiony w iso-8859-1. Usunę je.

  • kuku (2008-03-08 17:48:30):

    czasem też można zobaczyć 4 literki w kwadraciku
    a ja ostatnio walczyłem ze zmianą nazw w cyrylicy na unicode – wyglądało to mniej wiecej tak:(wejsciowego kodowania nie znałem)

    for i in convmv —list; do convmv —qfrom -f $i -t UTF8 14\ -
    Ò‰êö’å\ Ž’ƒŒö©ê\ ã\ èƒåŒØêåŒØ.mp3 ;done

    a potem tylko trzeba było wybrać odpowiednie (najłądniejsze – znaczy się ;)

  • Mike (2008-03-08 19:08:20):

    Z tym MySQL’em to faktycznie jaja sa. Mialem jedna konwersje ze starego na nowego SQL’a i musialem szybko wydumac jak zrobic gladkie przejscie. Udalo sie, ale chwilami bylo ciezko.

  • BTM (2008-03-08 19:46:49):

    Ej no, co to za Microsoftowy tekst? Co się stało z „Zażółć gęślą jaźń” ? :P

  • Automaciej (2008-03-08 20:04:06):

    BTM: Zażółć gęślą jaźń ma za mało liter bez akcentów, jak się pokrzaczy, to już tak strasznie, że w ogóle nie widać, jakie to były słowa. Nie upieram się, jestem otwarty na propozycje. :-)

  • Joanna (Typoagrafka) (2008-03-08 21:12:43):

    — Tylko nieliczni potrafili powiedzieć zobaczywszy na przykład „Pchn±æ w tê ³ód¼ je¿a i o¶m skrzyñ fig.”, powiedzieć „A, to jest iso-8859-2 interpretowane jako iso-8859-1.”

    — Bardzo ciekawy artykuł i spostrzeżenie, Maćku! Dzięki! A skrypt na pewno wypróbuję w wolnej chwili!

  • Joanna (Typoagrafka) (2008-03-08 21:16:17):

    PS: „Pchnąć w tę łódź jeża lub ośm skrzyń fig” nie ma nic wspólnego z Microsoftem. To zdanie, które zawiera każdą literę polskiego alfabetu dokładnie raz i dlatego jest szczególnej wartości do tego celu idealne. Istnieje jeszcze kilka takich zdań. Patrz Pangram@Wikipedia

  • btm (2008-03-08 21:33:08):

    Joanno, wiem, co to Pangram. A z Microsoftem ma więcej wspólnego niż Ci się wydaje – wystarczy pogooglać (+ dodać słowo „office”, bodaj w Word’dzie jest) Tymniemniej, o wiele częściej stosuje się gęślą jaźń bo jest szybsze do wpisania i takoż zawiera wszystki polskie znaki diakrytyczne :)

  • Joanna (Typoagrafka) (2008-03-08 23:41:50):

    To, że Microsoft wbudował w Worda trick który wypisuje ten pangram ileśtam razy z automatu nie robi z niego jeszcze „microsoftowego tekstu”, bez przesady. Mogę sobie napisać program, który mi to zrobi w dowolnym edytorze, to jeszcze nie znaczy, że to będzie „asiowy tekst”. Tylko o to mi chodzi. Ale nie zaśmiecajmy Gospodarzowi komentarzy. Microsoftem. :P

  • R@V (2008-03-09 21:57:53):

    Niestety, tak to bywa, że tzw WebMajsterzy nie wiedzą o co chodzi z kodowaniem bazy danych i klienta bazy danych…

    Wielokrotnie widziałem jak np utf-8 było wrzucane do pól zdefiniowanych jako iso8859-1. co powodowało spore problemy z ewentualnym importem.

    Oczywiście jak ktoś chce to się uda, zrobić wszystko i tak.
    W przypadku – mysql+php – mysqli_client_encoding(); – postgres+php – pg_client_encoding();

    gdy zakładamy bazę – mysql – set names [kodowanie] i dodatkowo zakładając tabele musi być ustawioene odpowiednie collation. _ci(case insensitive) _bi(case sensitive) – postgres – -E [kodowanie]

    a na stronie to chyba nawet dzieci wiedzą, że w meta to się ustawia a dodatkowo wysyła się w nagłówkach.

    korzystając z tak niewielkiej ilości informacji można już sporo zdziałać i spowodować, że kodowanie nie będzie bolączką…

    Pozdrawiam

  • automaciej (2008-03-13 19:32:31):

    Napraw swój pokrzaczony tekst

    Niedawno poszła plotka, że napisałem skrypt który rozpoznaje pokrzaczone polskie literki. Postanowiłem nadgonić plotkę i naprawdę go napisałem.
    Tym razem jest to dostępny on-line skrypt, do którego można wkleić pokrzaczony polski tekst,[…]

  • ,./,/.ij8890980i (2011-03-29 11:48:28):

    jebane huje

  • Kurt (2011-12-11 15:41:32):

    Ciekawe c o to za kretyn wpisał się powyżej. Najwyraźniej miał pokrzaczone kodowanie we łbie.

  • Pozycjonowanie stron (2013-03-12 15:11:35):

    Można wykryć kodowanie za pomocą mbdetectencoding