Tekst i pisanie
Polskie znaki w nazwach plików i adresach stron: kiedy przeszkadzają i jak je usunąć
Nazwa pliku z „ł” czy „ą” zwykle działa. Kłopot zaczyna się dopiero wtedy, gdy plik przechodzi między systemami, archiwami, formularzami i adresami URL. Sprawdź, w którym z tych miejsc ogonki mogą Ci przeszkadzać, i usuń je z całej listy nazw naraz.
- Redakcja HNarzędzi
- Publikacja:
Polskie litery w nazwach plików w nowoczesnych systemach zwykle działają bez zastrzeżeń. Problem pojawia się na styku: archiwum ZIP otwarte starszym programem, plik przeniesiony z Maca, formularz z polem tylko na znaki ASCII, adres strony wklejony do komunikatora. W każdym z tych miejsc zawodzi inny mechanizm, więc najpierw ustal, który Cię dotyczy. Jeśli nic z poniższej tabeli nie występuje w Twoim obiegu plików, ogonków możesz nie ruszać.
Gdzie ogonki psują się naprawdę
| Sytuacja | Co się dzieje | Co robi różnicę |
|---|---|---|
| Archiwum ZIP rozpakowane starszym programem | Nazwy pokazują się jako przypadkowe znaki | Kodowanie nazw zapisane w archiwum |
| Plik z Maca otwarty lub porównywany gdzie indziej | Ta sama nazwa ma dwa różne zapisy (NFC i NFD) | Normalizacja Unicode |
| Formularz, system księgowy lub bankowy z polem na ASCII | Odrzucony plik albo zniekształcona nazwa | Zależy od konkretnego systemu |
| Adres strony | Zamiast „ł” w linku widać %C5%82 |
Kodowanie procentowe (UTF-8) |
ZIP i kodowanie nazw
Specyfikacja formatu ZIP (APPNOTE 6.3.10 firmy PKWARE, dodatek D, sprawdzona w październiku 2026) mówi, że historycznie nazwy plików w ZIP-ie zapisywano w kodowaniu IBM Code Page 437. Nazwę w UTF-8 oznacza dopiero bit 11 flagi (EFS). Gdy archiwum nie ma tej flagi, nazwa powinna mieścić się w kodowaniu 437, które nie obejmuje polskich liter, a programy radzą sobie z tym różnie. Dlatego nazwa z „ł” zapisana przez jeden program może zamienić się w krzaczki w innym. Archiwum z samymi znakami ASCII w nazwach tego ryzyka nie ma.
Normalizacja NFC i NFD na Macu
Ta sama litera w Unicode ma czasem dwa zapisy. „ą” może być jednym znakiem (U+0105, forma NFC) albo literą „a” z doklejonym ogonkiem (U+0061 i U+0328, forma NFD). Opisuje to raport Unicode UAX #15. Na Macu ma to znaczenie z powodu historii systemu plików. Apple w dokumentacji HFS Plus (TN1150) pisze, że HFS Plus zapisuje nazwy w pełni rozłożone (decomposed) i podaje „é” rozkładane na „e” i U+0301. Dokumentacja APFS, obecnego systemu plików Apple, opisuje nazwy jako niezależne od normalizacji: do porównania nazwę rozkłada się do NFD. Sprawdziliśmy to na APFS w naszym Macu: plik zapisany pod nazwą „zażółć.txt” w formie NFC wrócił z katalogu w tej samej formie, a odszukanie go nazwą w NFD też się udało. W obrębie jednego Maca nic się więc nie psuje. Różnica pojawia się, gdy nazwa trafia do programu lub systemu, który porównuje ciągi znaków bez normalizacji.
W Node.js widać, co to oznacza dla polskich liter:
'ą'.normalize('NFD').length; // 2 (a + U+0328)
'ł'.normalize('NFD').length; // 1 (U+0142, bez zmian)
'zażółć'.normalize('NFC') === 'zażółć'.normalize('NFD'); // false
'zażółć'.normalize('NFC').length; // 6
'zażółć'.normalize('NFD').length; // 9
Dwie nazwy, które wyglądają tak samo, mogą być różnymi ciągami znaków. Przez to program, który porównuje znaki bez normalizacji, może nie znaleźć pliku, którego nazwa jest zapisana w drugiej formie. Litera „ł” (U+0142) nie ma rozkładu, więc w obu formach wygląda tak samo. Dotyczy to też „ø”.
Formularze i starsze systemy
Niektóre formularze, systemy księgowe i bankowe przyjmują w polach tylko znaki ASCII albo zniekształcają pozostałe. Nie ma na to jednej reguły ani wspólnego źródła, bo zależy to od konkretnego systemu. Jeśli formularz odrzuca plik bez wyjaśnienia, a nazwa ma ogonki, usunięcie ich jest najtańszą próbą.
Adresy URL: %C5%82 i co na to Google
Adres może zawierać tylko część znaków bezpośrednio. Reszta jest kodowana procentowo: znak zamienia się na bajty UTF-8 zapisane jako % i dwie cyfry szesnastkowe. W JavaScript robi to encodeURIComponent (MDN). Wynik policzony w Node:
encodeURIComponent('zażółć gęślą jaźń');
// "za%C5%BC%C3%B3%C5%82%C4%87%20g%C4%99%C5%9Bl%C4%85%20ja%C5%BA%C5%84"
encodeURIComponent('ł'); // "%C5%82"
encodeURIComponent('ą'); // "%C4%85"
encodeURIComponent('ą'.normalize('NFD')); // "a%CC%A8"
`https://example.com/pliki/${encodeURIComponent('Łódź plan.pdf')}`;
// "https://example.com/pliki/%C5%81%C3%B3d%C5%BA%20plan.pdf"
Dwa wyrażenia z „ą” pokazują skutek NFC i NFD w adresie: w formie NFC to %C4%85, a w NFD a%CC%A8, czyli dwa różne adresy dla tej samej nazwy. Zakodowany adres jest poprawny, ale trudny do odczytania w wiadomości: każda polska litera zajmuje w nim sześć znaków zamiast jednego.
Czy Google wymaga ASCII w adresach? Nie. Poradnik Google Search Central o strukturze adresów URL (ostatnia aktualizacja strony: 10 grudnia 2025, sprawdzona w październiku 2026) zaleca słowa w języku odbiorców, a jako przykład podaje niemiecki adres gemüse. Przy linkowaniu do własnych stron radzi stosować kodowanie procentowe w atrybucie href, na przykład gem%C3%BCse. Dokument zaleca też myślniki zamiast podkreślników i przypomina, że wyszukiwarka rozróżnia wielkość liter w adresach, więc spójne małe litery są bezpieczniejsze. Z tej strony nie wynika, że ogonki szkodzą pozycji. Adres bez ogonków wybierasz dla czytelności i wygody kopiowania, nie z wymogu wyszukiwarki. Jeśli masz już działające adresy z polskimi literami, nie zmieniaj ich bez przekierowań.
Jak usunąć ogonki: dwa narzędzia, dwa zadania
Usuwanie polskich znaków służy do nazw plików i zwykłego tekstu. Generator slugów tworzy fragment adresu URL. Obydwa działają w przeglądarce, a wklejony tekst nie trafia na serwer.
Usuwanie polskich znaków zamienia każdą z 18 liter ze znakami diakrytycznymi (małe i wielkie ą, ć, ę, ł, ń, ó, ś, ź, ż) z tabeli w kodzie: ą na a, ć na c, ł na l, ż na z. Litera „ł” ma osobny wpis w tej tabeli, bo sama normalizacja Unicode jej nie ruszy. Sprawdziliśmy w Node: rozkład do NFD i usunięcie znaków łączących zamienia „zażółć gęślą jaźń” na „zazołc gesla jazn”, z „ł” na miejscu. Narzędzie daje „zazolc gesla jazn”.
Ustawienie „Usuń także inne znaki diakrytyczne (é, ü, ß, ø, č…)” decyduje o zakresie. W polskiej wersji narzędzia jest domyślnie wyłączone: zmieniane są tylko polskie litery, a „ü” czy „é” zostają. Po włączeniu narzędzie usuwa też pozostałe akcenty (é na e, ü na u) i zamienia ß na ss oraz ø na o. Spacje, cyfry, znaki interpunkcyjne, wielkość liter i rozszerzenie pliku zostają. Pod wynikiem widać liczbę zamienionych znaków. Narzędzie radzi sobie też z nazwami rozłożonymi (NFD), jakie zapisuje HFS Plus: nazwę Zażółć gęślą jaźń.txt w formie NFD (29 znaków) wklejoną w trybie „tylko polskie litery” zamieniło na Zazolc gesla jazn.txt.
Generator slugów robi więcej, bo zakłada adres internetowy. Domyślnie tworzy wszystkie litery małe, rozdziela słowa myślnikami i usuwa wszystko, co nie jest literą ani cyfrą. Znak & zamienia na „i” w polskiej wersji narzędzia (w angielskiej na „and”). Apostrof i cudzysłów znikają bez śladu. Ustawienia: separator (myślnik, podkreślnik lub kropka), małe litery, usuwanie słów funkcyjnych (polskich i angielskich: i, w, z, na, the, of…) oraz maksymalna długość. Pole „Każda linia osobno” zamienia listę tytułów na listę slugów.
Przykład: osiem nazw plików przez oba narzędzia
Lista składa się z fikcyjnych nazw wygenerowanych skryptem. Jest w niej polski tekst, nazwy z innych języków i jedna nazwa bez znaków specjalnych jako kontrola. Poniższe wyniki odczytaliśmy z narzędzi w przeglądarce (Chromium sterowany Playwrightem).
| Nazwa pliku | Tylko polskie litery (domyślnie w PL) | Wszystkie akcenty | Slug |
|---|---|---|---|
Zażółć gęślą jaźń.txt |
Zazolc gesla jazn.txt |
Zazolc gesla jazn.txt |
zazolc-gesla-jazn-txt |
Łódź Śródmieście plan.pdf |
Lodz Srodmiescie plan.pdf |
Lodz Srodmiescie plan.pdf |
lodz-srodmiescie-plan-pdf |
Faktura nr 10-2026 Wałęsa & Synowie.pdf |
Faktura nr 10-2026 Walesa & Synowie.pdf |
Faktura nr 10-2026 Walesa & Synowie.pdf |
faktura-nr-10-2026-walesa-i-synowie-pdf |
Müller Straße Øresund.docx |
bez zmian | Muller Strasse Oresund.docx |
muller-strasse-oresund-docx |
Crème brûlée São Paulo.jpg |
bez zmian | Creme brulee Sao Paulo.jpg |
creme-brulee-sao-paulo-jpg |
Čapek Český Krumlov.png |
bez zmian | Capek Cesky Krumlov.png |
capek-cesky-krumlov-png |
ŁÓDŹ ŻÓŁW.TXT |
LODZ ZOLW.TXT |
LODZ ZOLW.TXT |
lodz-zolw-txt |
raport_roczny.v2.pdf |
bez zmian | bez zmian | raport-roczny-v2-pdf |
Licznik pod wynikiem pokazał 23 zamienione znaki w trybie „tylko polskie litery” i 33 po włączeniu pozostałych akcentów. Całą listę wklejamy do pola po lewej, a wynik kopiujemy z prawego.

Z tabeli wynikają trzy rzeczy.
Slug nie nadaje się do nazw plików. Zamienia kropkę przed rozszerzeniem na myślnik, więc plan.pdf staje się plan-pdf, a raport_roczny.v2.pdf traci i rozszerzenie, i kropkę oraz podkreślnik. Do nazw plików użyj usuwania znaków. Slug jest do fragmentu adresu, gdzie rozszerzenia zwykle nie ma.
Dwie różne nazwy mogą po usunięciu ogonków dać tę samą. Łódź.pdf i Lodz.pdf w jednym folderze zlewają się w jedną nazwę, a system albo zapyta o nadpisanie, albo doda numer. Przy większej liście sprawdź wynik pod kątem powtórzeń, zanim zmienisz nazwy.
Zamiana liter jest uproszczeniem. „ß” dostaje ss, ale w niemieckich nazwiskach często pisze się „ü” jako „ue”, a tego narzędzie nie robi (z „Müller” zostaje „Muller”).
Slug i jego długość
Generator pokazuje długość sluga w znakach i podgląd adresu. Dla tytułu „Raport kwartalny: sprzedaż w województwie łódzkim i śląskim, wnioski dla zarządu” slug ma 78 znaków. Z maksymalną długością 40 narzędzie tnie go na granicy słowa: raport-kwartalny-sprzedaz-w-wojewodztwie. Wiszące „w” na końcu psuje wynik. Po włączeniu usuwania słów funkcyjnych slug wygląda lepiej: raport-kwartalny-sprzedaz-wojewodztwie (38 znaków). Narzędzie nie wybiera za Ciebie, co jest ważne w tytule, więc przeczytaj wynik przed publikacją.

Kiedy usuwać, a kiedy zostawić
Usuń ogonki, gdy plik trafia do systemu z ASCII, do archiwum, które ktoś otworzy na nieznanym programie, albo gdy chcesz mieć link, który da się odczytać w całości. Zostaw je, gdy nazwa ma być czytelna dla odbiorcy po polsku (dokument dla klienta) i obieg pliku nie przechodzi przez żadne z miejsc z pierwszej tabeli. W adresach stron Google nie wymaga ASCII, więc to Twoja decyzja redakcyjna.