Zeichenlängenrechner
Fügen Sie eine Zeichenkette ein, und das Tool gibt ihre Länge in vier verschiedenen Bedeutungen an, JavaScript-Stil .length (UTF-16-Codeeinheiten), Unicode-Codepunkte, Graphemcluster (was Benutzer als ein Zeichen wahrnehmen) und UTF-8-Bytes (was Ihre Datenbankspalte tatsächlich speichert). Diese Zahlen stimmen nicht überein für jede Zeichenkette mit Emojis, Flaggen oder kombinierenden Zeichen, und diese Diskrepanz ist die Quelle vieler Fehler.
Die vier Sinne der Zeichenlänge
-
1
UTF-16-Codeeinheiten
Was `str.length` in JavaScript zurückgibt. 1 für die meisten Zeichen, 2 für jeden Codepunkt über U+FFFF (Emojis, alte Schriften).
-
2
Codepunkte
Einer pro Unicode-Skalare. Emojis sind jeweils 1; ZWJ-Sequenzen sind mehrere.
-
3
Graphemcluster
Was ein Benutzer als "ein Zeichen" bezeichnet. `🇺🇸` sind 2 Codepunkte, aber 1 Graphem. `n̈` sind 2 Codepunkte, aber 1 Graphem.
-
4
UTF-8-Bytes
Was Ihre DB speichert. ASCII = 1 Byte jeweils; gängige europäische = 2; CJK = 3; die meisten Emojis = 4.
Beispiele
| Zeichenkette | JS .length | Codepunkte | Grapheme | UTF-8-Bytes |
|---|---|---|---|---|
hello |
5 | 5 | 5 | 5 |
café |
4 | 4 | 4 | 5 |
😀 |
2 | 1 | 1 | 4 |
🇺🇸 |
4 | 2 | 1 | 8 |
👨👩👧 (Familie) |
8 | 5 | 1 | 18 |
n̈ (n + Diaeresis) |
2 | 2 | 1 | 3 |
Warum die Zahlen unterschiedlich sind
JavaScript-Zeichenketten sind UTF-16, sodass ein Codepunkt über U+FFFF als Surrogatpaar gespeichert wird, zwei UTF-16-Codeeinheiten. "😀".length === 2. Benutzer mögen das nicht, weil sie 😀 als ein Zeichen betrachten.
Grapheme gehen weiter: eine Länderflagge sind zwei regionale Indikator-Codepunkte, die der Benutzer als eine Flagge sieht. "🇺🇸".length === 4 in JavaScript, was absurd erscheint, aber so ist es. Um über Grapheme zu iterieren, verwenden Sie Intl.Segmenter (modern), die grapheme-splitter-Bibliothek oder behandeln Sie es manuell.
UTF-8-Bytes: was Ihre Datenbank speichert
Für eine Spalte vom Typ VARCHAR(255):
- In MySQL
utf8(tatsächlich: utf8mb3) sind die 255 Bytes.cafébenötigt 5 Bytes, sodass Sie 51 Kopien unterbringen können. - In MySQL
utf8mb4(echtes UTF-8, einschließlich Emojis) sind es immer noch Bytes, aber die Kodierung unterstützt 4-Byte-Sequenzen. - In Postgres
VARCHAR(255)sind die 255 Zeichen (Codepunkte), nicht Bytes. - In SQL Server
VARCHARvariiert je nach Sortierung;NVARCHARzählt 2-Byte-UCS-2-Einheiten.
Wenn Sie Datenbankfelder nach der sichtbaren Zeichengrenze des Benutzers dimensionieren, verwenden Sie Bytes × 4 zur Sicherheit in UTF-8-Spalten, jedes Graphem benötigt potenziell bis zu 4 Bytes pro Codepunkt, wobei ZWJ-Sequenzen mehr hinzufügen.
Twitter-Stil Zeichen zählen
Twitter zählt einen Tweet nach einer benutzerdefinierten Regel: Codepunkte, aber Emojis und CJK-Ideogramme zählen als 2. Ein 100% ASCII-Tweet kann 280 Zeichen haben; ein Tweet mit 140 Emojis erreicht maximal 140 “Zeichen”.
SMS-Zählung: 160 Zeichen im GSM 7-Bit. Jedes Nicht-GSM-Zeichen (á, é, ñ, Emoji) wechselt die Kodierung zu UCS-2, und die Länge Ihrer Nachricht sinkt auf 70 Zeichen.
Praktische Anwendungen
- Datenbankspalten-Dimensionierung, Überprüfen Sie die Byte-Anzahl, bevor Sie eine Migration schreiben.
- API-Quota-Durchsetzung, Die meisten APIs zählen Bytes, nicht Zeichen.
- Formularvalidierung, Zeigen Sie dem Benutzer eine genaue Zeichenzahl, die seinen Erwartungen entspricht (Grapheme).
- Leistungs-Debugging, Warum iteriert dieses Regex langsam? Weil die Eingabe in Codeeinheiten 3x länger ist als in Graphemen.
Häufig gestellte Fragen
Dieses Emoji ist eine ZWJ-Sequenz, die mehrere Codepunkte kombiniert (z. B. ein Familien-Emoji sind 7 Codepunkte). Twitter zählt es nach der Regel für Unicode-Gewicht mit 2 Zeichen; Ihr Editor zeigt 1 Graphem. Beide sind technisch richtig, sie messen nur unterschiedliche Dinge.
In UTF-8-Datenbanken sollten Sie 4 Bytes pro erwartetes Zeichen zur Sicherheit einplanen. Ein 100-Zeichen (Graphem) Feld sollte VARCHAR(400) Bytes sein, oder wenn Ihre DB in Zeichen wie Postgres zählt, VARCHAR(100) mit der Zeichencodierung.
In JavaScript: es hängt von der Kompositionsform ab. NFC zusammengesetzt (U+00E1) hat die Länge 1; NFD zerlegt (U+0061 + U+0301) hat die Länge 2. Dasselbe sichtbare Zeichen, unterschiedliche Byte-Sequenzen.
Familien- und Berufs-Emojis sind lange ZWJ-Sequenzen. Schriftarten ohne vollständige Unterstützung rendern jeden Codepunkt als separates Glyph, sodass 👨💻 zu 👨+💻 wird. Ein Upgrade der Schriftart des Betriebssystems behebt das.
Verwandte Tools
Domain-Name-Generator
Generieren Sie Domainnamen-Ideen aus einem Schlüsselwort: Präfixe, Suffixe, verdoppelte Buchstaben und Zahlen-Endungen in sechs gängigen TLDs.
Glitch-Text-Generator
Erstelle Zalgo-artigen Glitch-Text mit kombinierenden Unicode-Zeichen. Wähle die Intensität, prüfe Varianten und kopiere beschädigt wirkenden Text für Profile, Memes oder Horror-Posts.
Pfeilsymbole zum Kopieren
Kopiere gängige Unicode-Pfeile mit einem Klick: gerade, doppelte, diagonale, hakenförmige, kreisförmige und dreieckige Pfeile für Dokumente, Chats und Designs.
HTML-Entitäten-Encoder
Wandeln Sie fünf HTML-sensitive Zeichen in feste Entitäten um oder lesen Sie HTML-Entitäten lokal im Browser als Text.
Städtenamen-Generator
Generiere fiktive Namen für Städte, Kleinstädte, Dörfer und Hauptstädte für Worldbuilding, Karten, Spiele, Geschichten und Testdaten, mit kurzen Notizen zu jedem Ergebnis.
Invertierter Textgenerator
Stellen Sie Text mit Unicode-Zeichen auf den Kopf, die wie gespiegelte Buchstaben aussehen, für Bios, Bildunterschriften und auffällige Social-Media-Beiträge.
Tool in anderen Sprachen verfügbar
- Kalkulator Panjang String [ID]
- مقياس طول السلسلة النصية [AR]
- Stringlengteberekenaar [NL]
- Calculadora de Longitud de Cadenas [ES]
- 문자열 길이 계산기 [KO]
- Kalkulator długości ciągu znaków [PL]
- Calculateur de longueur de chaîne [FR]
- Stränglängdsberäknare [SV]
- Calculadora de Comprimento de String [PT]
- เครื่องคำนวณความยาวของสตริง [TH]
- 文字列長計算ツール [JA]
- Công cụ tính chiều dài chuỗi ký tự [VI]
- Dize Uzunluğu Hesaplayıcı [TR]
- 字符串长度计算器 [ZH]
- String Length Calculator [EN]
- Calcolatore della lunghezza della stringa [IT]
- Калькулятор длины строки [RU]