CodeKitHub
Narzędzia tekstowe

Licznik bajtów — liczba znaków a rozmiar w bajtach

Ostatnia aktualizacja:

Wpisz lub wklej tekst i zobacz na żywo, ile zawiera znaków w porównaniu z tym, ile bajtów faktycznie zajmuje w UTF-8 i UTF-16 — te dwie liczby zaczynają się różnić, gdy tylko pojawiają się znaki spoza ASCII (akcenty, tekst CJK, emoji).

0
Characters
0
UTF-8 bytes
0
UTF-16 bytes

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ć

  1. Wpisz lub wklej tekst w pole.
  2. 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-16

Część 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 znakuPrzykładBajty UTF-8Bajty UTF-16
Litera/cyfra ASCIIA, 712
Łaciński z akcentem (é, ñ, ü)é22
Cyrylica / greka / hebrajski / arabskiд, α, א22
CJK (chiński, japoński, koreański)32
Większość emoji (poza BMP)🌍44

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.

Powiązane narzędzia