Czym jest to narzędzie?
Dla zwykłego tekstu ASCII (angielskie litery, cyfry, podstawowa interpunkcja) liczba znaków i liczba bajtów to ta sama liczba — każdy znak zajmuje dokładnie jeden bajt w UTF-8. Gdy tekst zawiera litery z akcentami, znaki chińskie/japońskie/koreańskie, cyrylicę, arabski, emoji lub większość innych znaków spoza ASCII, przestaje to być prawdą: pojedynczy znak może zajmować 2, 3 lub 4 bajty w UTF-8 oraz 2 lub 4 bajty w UTF-16.
Ma to znaczenie zawsze, gdy system ma limit bajtów, a nie limit znaków — wiadomości SMS, rozmiary kolumn w bazach danych, limity ładunków API i niektóre platformy społecznościowe mierzą w bajtach, nie w znakach, więc ten sam fragment tekstu może po cichu przekroczyć limit w zależności od tego, jaki język lub symbole zawiera.
Dlaczego warto go używać?
- Pole bio w stylu Twittera/X ma limit bajtów, a nie znaków, a Twoje imię zawiera emoji — wpisz je tutaj, by zobaczyć rzeczywisty koszt w bajtach, zanim formularz po cichu je obetnie.
- Kolumna w bazie danych Twojej aplikacji jest zdefiniowana jako VARCHAR(255) w bajtach, a japoński lub arabski tytuł produktu, który „wygląda krótko”, wciąż jest odrzucany — wklej go tutaj, by zobaczyć, że zajmuje 3 razy więcej bajtów niż tytuł w alfabecie łacińskim.
- Szacujesz, ile segmentów SMS zajmie wielojęzyczna wiadomość marketingowa — operatorzy rozliczają i dzielą wiadomości według rozmiaru w bajtach, więc sprawdzenie tutaj liczby bajtów UTF-8/UTF-16 jest lepsze niż zgadywanie i nieoczekiwanie wysoki rachunek.
- API zwraca tajemniczy błąd „payload too large” dla pola JSON z rygorystycznym walidatorem długości w bajtach, a ciąg wyglądał normalnie w Twoim edytorze — to narzędzie pokazuje dokładnie, ile bajtów naprawdę kosztuje ten ciąg.
- Sprawdzasz, dlaczego to samo zdanie zajmuje więcej miejsca w jednym języku niż w drugim — wpisujesz każdą wersję i widzisz, jak liczba bajtów UTF-8 rośnie dla tekstu CJK lub arabskiego w porównaniu z wersją czysto ASCII.
- Musisz sprawdzić, czy emoji w nazwie użytkownika jest liczone jako jeden czy dwa znaki przez wybredną regułę walidacji — to narzędzie liczy je tak, jak widziałby je człowiek, więc od razu widać, czy inny system liczy źle.
Jak używać
- Wpisz lub wklej tekst w pole.
- Odczytaj liczbę znaków, liczbę bajtów UTF-8 i liczbę bajtów UTF-16 poniżej — aktualizują się podczas pisania.
Przykład
Wejście
Hello, 世界! 🌍Wynik
12 znaków, 19 bajtów UTF-8, 26 bajtów UTF-16Część ASCII („Hello, ” i „! ”) zajmuje 1 bajt na znak w UTF-8. Każdy chiński znak zajmuje 3 bajty, a emoji zajmuje 4 bajty — dlatego liczba bajtów jest wyraźnie wyższa niż liczba znaków.
Rozmiar w bajtach UTF-8 według typu znaku
Poniższa tabela pokazuje typowy koszt w bajtach UTF-8 według kategorii znaku — przydatna do oszacowania, ile faktycznie będzie ważył wielojęzyczny tekst, zanim wkleisz go w całości.
| Typ znaku | Przykład | Bajty UTF-8 | Bajty UTF-16 |
|---|---|---|---|
| Litera/cyfra ASCII | A, 7 | 1 | 2 |
| Łaciński z akcentem (é, ñ, ü) | é | 2 | 2 |
| Cyrylica / greka / hebrajski / arabski | д, α, א | 2 | 2 |
| CJK (chiński, japoński, koreański) | 世 | 3 | 2 |
| Większość emoji (poza BMP) | 🌍 | 4 | 4 |
Typowe zastosowania
- Sprawdzanie, czy wielojęzyczny opis produktu zmieści się w kolumnie bazy danych zdefiniowanej przez długość w bajtach, a nie liczbę znaków.
- Szacowanie liczby segmentów SMS, ponieważ SMS jest rozliczany i dzielony według rozmiaru w bajtach, a tekst niełaciński ma inny limit na segment.
- Weryfikacja, czy ładunek API lub pole formularza mieści się w limicie rozmiaru opartym na bajtach przed wysłaniem.
- Zrozumienie, dlaczego ciąg znaków, który „wygląda krótko”, jest odrzucany przez system z kontrolą długości opartą na bajtach.
Najczęściej zadawane pytania
Dlaczego liczba znaków i liczba bajtów się nie zgadzają?
Tekst Unicode jest przechowywany jako bajty, a to, ile bajtów potrzebuje każdy znak, zależy od kodowania i samego znaku. W UTF-8 znaki ASCII zajmują 1 bajt, większość liter łacińskich z akcentami oraz cyrylicy/greki/hebrajskiego/arabskiego zajmuje 2 bajty, większość znaków CJK zajmuje 3 bajty, a emoji zwykle zajmują 4 bajty. Liczba znaków po prostu liczy symbole, ignorując sposób ich przechowywania.
Której liczby bajtów użyć dla pola z limitem bajtów?
Użyj tego kodowania, którego system faktycznie używa do przechowywania lub przesyłania tekstu — większość nowoczesnych API internetowych, baz danych i plików używa UTF-8, więc zwykle to liczba bajtów UTF-8 jest istotna. Niektóre starsze systemy (jak wewnętrzna obsługa łańcuchów w Windows/Java) używają UTF-16.
Czy to poprawnie liczy emoji?
Tak. Wiele emoji jest przechowywanych wewnętrznie jako para jednostek kodu „surogatów” UTF-16, które naiwne metody liczenia liczą jako 2 znaki. To narzędzie poprawnie liczy punkty kodowe Unicode, więc emoji jest liczone jako 1 znak, zgodnie z tym, ile znaków faktycznie widzi użytkownik.
Czy to to samo co narzędzie Licznik słów?
Nie — Licznik słów koncentruje się na liczbie słów i zdań do celów pisarskich. To narzędzie dotyczy konkretnie rozmiaru w bajtach w porównaniu z liczbą znaków, co ma znaczenie dla limitów technicznych, a nie wymagań dotyczących liczby słów.
Czy mój tekst jest gdzieś przesyłany?
Nie. Liczenie odbywa się lokalnie w Twojej przeglądarce za pomocą wbudowanego kodera tekstu JavaScript; nic nie jest wysyłane na serwer.
Dlaczego ten sam znak zajmuje inną liczbę bajtów w UTF-8 niż w UTF-16?
Obie kodowania mają zupełnie inne zasady mapowania punktów kodowych na bajty. UTF-8 używa od 1 do 4 bajtów w zależności od znaku, zoptymalizowane tak, by ASCII pozostawał 1 bajtem. UTF-16 używa 2 bajtów dla większości znaków i 4 bajtów tylko dla znaków spoza podstawowej płaszczyzny wielojęzycznej (jak większość emoji) — więc chiński znak to 3 bajty w UTF-8, ale tylko 2 w UTF-16, a emoji to 4 bajty w obu.
Czy emoji z odcieniem skóry lub rodzinne (złożone z kilku połączonych znaków) jest liczone poprawnie?
Narzędzie liczy punkty kodowe Unicode, więc złożone emoji zbudowane z kilku punktów kodowych połączonych łącznikiem zero-width joiner (jak emoji rodziny) jest liczone jako kilka znaków, nie jeden — zgodnie z tym, jak tekst jest faktycznie zakodowany, mimo że wyświetla się jako pojedynczy glif.
Jaka jest różnica między liczbą bajtów UTF-8 a liczbą znaków dla zwykłego tekstu angielskiego?
Dla standardowego tekstu angielskiego używającego tylko liter ASCII, cyfr, spacji i podstawowej interpunkcji są identyczne — każdy znak to dokładnie 1 bajt w UTF-8. Różnica pojawia się dopiero po dodaniu liter z akcentami, symboli lub pism innych niż łacińskie.
Czy mogę tego użyć do dokładnego sprawdzenia limitów znaków na Twitterze/X lub w SMS-ach?
To narzędzie podaje surowe liczby znaków i bajtów, które są podstawą tych limitów, ale platformy czasem stosują własne reguły ważenia (np. niektóre liczą określone emoji lub adresy URL jako stałą liczbę znaków niezależnie od rzeczywistej długości) — sprawdź szczegółowe zasady danej platformy dla przypadków brzegowych, a to narzędzie użyj do zrozumienia bazowego kosztu w bajtach.
Dlaczego miałbym używać tego zamiast licznika znaków wbudowanego w mój edytor tekstu?
Większość edytorów liczy tylko znaki, a nie bajty według kodowania — jeśli limit, który musisz zachować, jest wyrażony w bajtach (co często dotyczy SMS-ów, kolumn baz danych czy ładunków API), licznik znaków w Twoim edytorze nic Ci nie powie o rzeczywistym limicie, który zaraz przekroczysz.