Czym jest długość stringu?

Długość stringu zależy od tego, co liczysz. Człowiek widzi znaki, ale programy liczą punkty kodowe, jednostki kodowe UTF-16 lub bajty, a te wartości często się różnią. Emoji 👍🏽 wygląda jak jeden znak, ale składa się z 2 punktów kodowych, 4 jednostek kodowych UTF-16 i 8 bajtów UTF-8. JavaScript, Java i C# zwracają jako długość liczbę jednostek kodowych UTF-16, bazy danych często ograniczają liczbę bajtów, a pola formularzy mogą liczyć znaki końca wiersza jako dwa znaki.

Opis narzędzia

To narzędzie jednocześnie pokazuje długość stringu w czterech jednostkach i sprawdza ją względem minimalnej oraz maksymalnej długości. Użyj go, aby sprawdzić, czy nazwa użytkownika, tytuł lub wartość w bazie danych mieści się w limicie, albo dlaczego dwa programy zwracają różne długości tego samego tekstu. Jeśli string jest zbyt długi, otrzymasz obciętą kopię mieszczącą się w limicie, bez przecięcia znaku na pół.

Funkcje

  • Zlicza znaki, punkty kodowe Unicode, jednostki kodowe UTF-16 i bajty UTF-8
  • Sprawdza długość względem opcjonalnej minimalnej i maksymalnej wartości, w wybranej jednostce
  • Pokazuje, ile jednostek pozostało do limitu, ile brakuje lub o ile limit został przekroczony
  • Obcina zbyt długi string bez rozdzielania emoji, flag ani liter ze znakami diakrytycznymi
  • Może ignorować początkowe i końcowe białe znaki
  • Może liczyć znaki końca wiersza jako CR LF, tak jak są one wysyłane przez formularze HTML

Jak to działa

Znaki to klastry grafemów — jednostki, które człowiek odczytuje jako jeden znak — wykrywane za pomocą wbudowanej w przeglądarkę segmentacji tekstu Unicode. Punkty kodowe to wartości Unicode znajdujące się w stringu. Jednostki kodowe UTF-16 to wartości zwracane przez String.length w JavaScript: znaki spoza Podstawowej Płaszczyzny Wielojęzycznej, takie jak większość emoji, zajmują dwie jednostki. Bajty UTF-8 określają rozmiar stringu zakodowanego w UTF-8. Obcinanie zachowuje całe znaki, dopóki dodanie kolejnego nie spowodowałoby przekroczenia maksymalnej długości.

Wskazówki

  • W przypadku limitu VARCHAR w MySQL lub varchar w PostgreSQL sprawdzaj długość według punktów kodowych Unicode. W przypadku limitu bajtów, na przykład dla klucza indeksu lub pola protokołu sieciowego, sprawdzaj ją według bajtów UTF-8.
  • Atrybut maxlength elementu wejściowego HTML liczy jednostki kodowe UTF-16, więc emoji może zająć maksymalnie dwie jednostki.
  • Przeglądarki wysyłają znaki końca wiersza w elementach textarea jako CR LF, dlatego serwer sprawdzający długość może liczyć każdy znak końca wiersza podwójnie. Włącz opcję CR LF, aby uzyskać zgodność.