Kiedy przydaje się tekst bez polskich znaków
Alfabet polski liczy 32 litery, a dziewięć z nich (ą ć ę ł ń ó ś ź ż) zapisujemy z ogonkiem, kreską albo kropką. Te dziewięć znaków psuje się wszędzie tam, gdzie dane przechodzą przez system nieprzygotowany na kodowanie UTF-8. Najczęściej chodzi o adresy URL, nazwy plików wysyłanych na serwer, identyfikatory w bazach danych, wiadomości SMS i import do starszych programów księgowych.
Osobnym przypadkiem jest wysyłka SMS-ów, bo wiadomość zapisana w podstawowym alfabecie GSM mieści 160 znaków. Wystarczy jedna polska litera, żeby operator przełączył ją na kodowanie Unicode, a limit spadł do 70 znaków. Przy wysyłce masowej oznacza to ponad dwukrotny wzrost kosztu, więc usunięcie diakrytyków jest wtedy decyzją czysto ekonomiczną.
Jak działa zamiana liter z ogonkami
Podstawą jest normalizacja Unicode w postaci NFD. Rozkłada ona znak złożony na literę bazową i osobny znacznik diakrytyczny, więc ą staje się parą a + ogonek, a ó parą o + kreska. Wystarczy potem usunąć wszystkie znaki z zakresu znaczników łączących, a zostaną same litery bazowe. Ta jedna operacja załatwia osiem z dziewięciu polskich liter, a przy okazji radzi sobie z niemieckim ü, francuskim é czy czeskim č.
Wyjątkiem jest ł. W Unicode ma własny numer kodowy, więc normalizacja nie ma w nim czego rozkładać i zamianę wykonuje osobna reguła. Ten sam problem dotyczy skandynawskiego ø i chorwackiego đ, które też obsługujemy.
Cały wynik mieści się w ASCII - w zestawie 128 znaków, który każdy system operacyjny koduje tak samo. Konwersja do ASCII kupuje więc kompatybilność ze starszym oprogramowaniem, a płaci się za nią poprawnością zapisu.
Czym różni się transliteracja fonetyczna
Podstawowa zamiana zachowuje kształt litery, więc ś zostaje s, bo tak wygląda po zdjęciu kreski. Transliteracja fonetyczna próbuje zachować brzmienie i zapisuje ś jako sz. Przyjęliśmy następującą konwencję:
ą → onię → en, czyli samogłoski nosowe rozbite na samogłoskę i spółgłoskę nosową,ć → cziś → sz, bo najbliższym zapisem zmiękczeń są polskie dwuznaki,ż → ziź → z, gdzie obie litery dostają w tej konwencji ten sam odpowiednik,ó → u, bo w polszczyźnie te dwie litery brzmią identycznie,ł → liń → n, bez zmiany względem trybu podstawowego.
Konwencja jest uproszczona, bo prawdziwa wymowa zależy od pozycji w wyrazie, gdzie ę na końcu brzmi jak e, ą przed b i p jak om, a ł jak angielskie w. Rozróżnienie tych przypadków wymagałoby analizy sąsiedztwa i tak czy inaczej nie dałoby wyniku dobrego dla wszystkich zastosowań. Transliteracja przydaje się przy zapisie polskich nazwisk dla osób nieznających polszczyzny i przy generowaniu haseł czytanych na głos.
Polskie znaki w plikach i nazwach
Narzędzie pracuje na czystym tekście, więc plik obrabiasz przez schowek. Zaznacz cały tekst w Notatniku albo w edytorze kodu, wklej go w górne pole, a wynik skopiuj z powrotem do pliku. Formatowania z Worda ani stylów z arkusza ta droga nie przenosi, bo do pola wejściowego trafiają same znaki. Tak samo poprawia się napisy do filmu, gdy odtwarzacz wyświetla polskie litery jako krzaki, bo czyta plik w innym kodowaniu, niż zostało użyte przy zapisie.
Drugi klasyczny kłopot to polskie znaki w nazwach plików. Windows i Linux radzą sobie z ogonkami, ale serwer po drugiej stronie połączenia FTP, adres w linku do pobrania i indeks wyszukiwarki potrafią zamienić je w ciąg procentów. W e-commerce wraca to przy zdjęciach produktowych, których nazwa idzie prosto do adresu obrazka i ma zostać czytelna. Przy imporcie arkusza do Excela albo do bazy danych to samo dotyczy nagłówków kolumn i identyfikatorów, bo część systemów obsługuje w nich wyłącznie ASCII. Z tego samego powodu nazwy zmiennych i kluczy trzyma się bez diakrytyków, kiedy programujesz.
Dlaczego nie da się przywrócić polskich znaków
Skoro narzędzie usuwa ogonki, czy potrafi je dodać z powrotem? Nie, i nie zrobi tego żadne narzędzie działające bez słownika i bez kontekstu zdania. Zamiana jest bezpowrotna - wiele różnych wyrazów po usunięciu diakrytyków wygląda tak samo. Z zapisu laska, sad i kat nie wynika, czy autor miał na myśli laskę, czy łaskę, sad czy sąd, kat czy kąt.
Programy, które próbują ten problem obejść, opierają się na modelach językowych i słownikach form fleksyjnych, a mimo to mylą się na nazwach własnych, na nazwiskach obcego pochodzenia i w krótkich fragmentach, w których żadne sąsiednie słowo nie podpowiada właściwej formy. Dla tekstu, który ma trafić do umowy albo do bazy klientów, taki wynik i tak sprawdzasz ręcznie, więc świadomie nie budujemy tej funkcji zamiast dawać narzędzie, któremu nie można ufać.