Vad är stränglängd?

Längden på en sträng beror på vad du räknar. En person ser tecken, men program räknar kodpunkter, UTF-16-kodenheter eller byte, och dessa tal skiljer sig ofta åt. Emojin 👍🏽 ser ut som ett tecken, men består av 2 kodpunkter, 4 UTF-16-kodenheter och 8 UTF-8-byte. JavaScript, Java och C# rapporterar UTF-16-kodenheter som längden, databaser begränsar ofta antalet byte, och formulärfält kan räkna radbrytningar som två tecken.

Verktygsbeskrivning

Det här verktyget visar längden på en sträng i fyra enheter samtidigt och kontrollerar den mot en minimi- och maximilängd. Använd det för att ta reda på om ett användarnamn, en titel eller ett databasvärde ryms inom en gräns, eller varför två program rapporterar olika längder för samma text. Om strängen är för lång får du en trunkerad kopia som ryms inom gränsen utan att dela ett tecken på mitten.

Funktioner

  • Räknar tecken, Unicode-kodpunkter, UTF-16-kodenheter och UTF-8-byte
  • Kontrollerar längden mot en valfri minimi- och maximilängd, i den enhet du väljer
  • Visar hur många enheter som återstår, saknas eller överskrider gränsen
  • Trunkerar en sträng som är för lång utan att dela emoji, flaggor eller bokstäver med diakritiska tecken
  • Kan ignorera inledande och avslutande blanksteg
  • Kan räkna radbrytningar som CR LF, på samma sätt som HTML-formulär skickar dem

Så fungerar det

Tecken är grafemkluster, alltså de enheter som en person läser som ett enda tecken, och hittas med webbläsarens inbyggda Unicode-textsegmentering. Kodpunkter är Unicode-värdena i strängen. UTF-16-kodenheter är det som String.length returnerar i JavaScript: tecken utanför det grundläggande flerspråkiga planet, till exempel de flesta emoji, tar upp två. UTF-8-byte är storleken på strängen när den kodas som UTF-8. Trunkeringen behåller hela tecken tills nästa tecken skulle göra att maximilängden överskrids.

Tips

  • För en VARCHAR-gräns i MySQL eller en varchar-gräns i PostgreSQL kontrollerar du med Unicode-kodpunkter. För en bytegräns, till exempel för en indexnyckel eller ett fält i ett nätverksprotokoll, kontrollerar du med UTF-8-byte.
  • Attributet maxlength i ett HTML-inputfält räknar UTF-16-kodenheter, så en emoji kan använda upp till två.
  • Webbläsare skickar radbrytningar i textarea-fält som CR LF, så en server som kontrollerar längden kan räkna varje radbrytning två gånger. Aktivera alternativet CR LF för att matcha detta.