Byte-Längen-Zähler nach Kodierung
Misst, wie viele Bytes Ihr Text in UTF-8, Shift_JIS, EUC-JP, UTF-16 und JIS (ISO-2022-JP) belegt. Nützlich zur Überprüfung von Datenbankspaltenlimits und Grenzwerten alter Formulare.
Zeichenzahl und Byteanzahl sind zweierlei
Dass zehn Zeichen dreißig Byte belegen, ist alltäglich, sobald nichtlateinischer Text ins Spiel kommt. **Die Byteanzahl ein und derselben Zeichenkette ändert sich mit der Kodierung:** In UTF-8 belegt ein japanisches Zeichen drei Byte und ein Emoji vier, während in Shift_JIS ein japanisches Zeichen in zwei Byte passt. Dieses Werkzeug zeigt auf einen Blick, auf wie viele Byte Ihre Eingabe unter fünf Verfahren zugleich kommt, nämlich UTF-8, Shift_JIS, EUC-JP, UTF-16 und ISO-2022-JP.
**Die daneben angezeigte Zahl der UTF-16-Codeeinheiten ist genau der Wert, den `.length` in JavaScript zurückgibt.** Hier liegt die am häufigsten übersehene Falle, denn Emoji und gewisse Zeichen werden durch ein Ersatzpaar aus zwei Einheiten dargestellt, sodass **das, was ein Mensch als ein Zeichen zählt, von `.length` als zwei gezählt wird.** Deshalb weist eine mit `.length` umgesetzte Längenbegrenzung eine Eingabe mit Emoji früher ab als erwartet. Auf der Seite der Datenbank verhält es sich ebenso: Ob ein `VARCHAR(255)` Byte oder Zeichen zählt, hängt vom Produkt und seiner Einstellung ab, weshalb es vor Fehlschlüssen bewahrt, beide Zahlen im Blick zu behalten.
So gehen Sie vor
- Geben Sie Ihren Text ein Die Zählung aktualisiert sich im Augenblick des Einfügens. Zeilenumbrüche sind ohne Weiteres zulässig.
- Vergleichen Sie Zeichenzahl und Byteanzahl **Ein einziges Zeichen kann in UTF-8 dennoch drei Byte ausmachen.**
- Lesen Sie die Zeile der Kodierung, die Sie betrifft Sehen Sie auf jenes Verfahren, das Ihr Speicher oder Ihr Ziel tatsächlich verwendet.
- Prüfen Sie die Zahl der UTF-16-Codeeinheiten **Wird Ihre Begrenzung mit `.length` durchgesetzt, entscheidet diese Zahl über das Ergebnis.**
Tipps für die Nutzung
- In UTF-8 belegen halbbreite alphanumerische Zeichen jeweils 1 Byte, während japanische Zeichen (Hiragana, Katakana, Kanji) meist 3 Bytes belegen. Dieselbe Zeichenanzahl kann daher bei englischem und japanischem Text sehr unterschiedliche Byte-Zahlen ergeben.
- Ältere Systeme mit byte-basierten Limits auf Spalten wie VARCHAR(255) erreichen ihre Obergrenze bei japanischem Text viel schneller als bei englischem Text gleicher Zeichenlänge.
- Die meisten Emojis werden durch ein Surrogatpaar aus zwei Codeeinheiten dargestellt und belegen sowohl in UTF-8 als auch in UTF-16 jeweils 4 Bytes — deshalb erreichen Zeichenzähler in sozialen Netzwerken ihr Limit manchmal früher als erwartet.
- Wenn Sie bereits eine Byte-Zahl kennen und diese in KB, MB oder andere Einheiten umrechnen möchten, nutzen Sie unser Schwestertool „Byte-Einheiten-Umrechner" — dieses Tool übernimmt die umgekehrte Berechnung von Text zu Byte-Zahl.
Wofür Sie es nutzen können
Um einen Überlauf in einer Spalte zu vermeiden
**Wo der Speicher nach Byte begrenzt, passt japanischer Text nur zu einem Drittel dessen hinein, was man annehmen würde.** Sie können es vor dem Einfügen prüfen.
Um die Eingabebegrenzung eines Formulars zu entwerfen
Es liefert die Grundlage für die Entscheidung, ob nach Zeichen oder nach Byte gedeckelt wird.
Um an ein Altsystem anzubinden
In Dateien fester Satzlänge und beim Austausch in Shift_JIS ist die Byteanzahl zugleich die Spaltenposition.
Um die Behandlung von Emoji zu prüfen
**Sie können bestätigen, ob eine Zeichenkette mit Ersatzpaaren die von Ihnen beabsichtigte Länge erhält.**
Begriffe zur Zeichenkodierung
- UTF-8
- Ein Verfahren, das die Zeichen der Welt in veränderlichen ein bis vier Byte darstellt. **Als Faustregel belegt ASCII eines, Japanisch drei und ein Emoji vier.**
- Shift_JIS
- Ein Verfahren für das Japanische, bei dem **ein japanisches Zeichen in zwei Byte passt.** In älteren Systemen und Dateien fester Satzlänge ist es weiterhin im Gebrauch.
- EUC-JP
- Ein japanisches Verfahren, das auf UNIX-Systemen lange verwendet wurde. Ein japanisches Zeichen belegt gewöhnlich zwei Byte.
- UTF-16
- Ein Verfahren, das Zeichen in Einheiten von sechzehn Bit darstellt. **Zeichenketten in JavaScript werden in diesen Einheiten gezählt.**
- Ersatzpaar
- Die Einrichtung, durch die **ein für eine UTF-16-Einheit zu großes Zeichen als Paar aus zweien ausgedrückt wird.** Emoji und gewisse Zeichen fallen in diese Gruppe.
- ISO-2022-JP
- Ein Verfahren, das Zeichensätze mittels Escape-Sequenzen umschaltet und lange in japanischer E-Post verwendet wurde. Es wird auch schlicht JIS genannt.
Häufig gestellte Fragen
Übrigens – Der versteckte Zusammenhang zwischen Zeichenlimits in sozialen Netzwerken und Byte-Zahlen
Ältere Versionen des MySQL-Zeichensatzes „utf8" hatten eine überraschende Einschränkung: Sie konnten eigentlich keine Unicode-Emojis speichern (ergänzende Zeichen ab U+10000). UTF-8 selbst ist eine variable Kodierung, die bis zu 4 Bytes pro Zeichen unterstützt, aber das MySQL-„utf8" war historisch auf 3 Bytes pro Zeichen begrenzt, was beim Speichern von Text mit Emojis zu INSERT-Fehlern führte. Die Migration zu „utf8mb4", das den vollen 4-Byte-Bereich korrekt unterstützt, gilt heute als empfohlene Lösung — ein bekanntes Beispiel dafür, warum das Verständnis der Beziehung zwischen Zeichenkodierung und Byte-Zahl in der Praxis tatsächlich wichtig ist.
Als Twitter (heute X) sein berühmtes 140-Zeichen-Limit durchsetzte, gab es eine lange Debatte über die Fairness zwischen Sprachen: Japanische Nutzer konnten mit 140 Zeichen einen recht vollständigen Gedanken ausdrücken, während englischsprachige Nutzer im selben Limit kaum 20 bis 30 Wörter unterbrachten. Das liegt daran, dass ein einzelnes japanisches Kanji-Zeichen weitaus mehr Information trägt als ein einzelner englischer Buchstabe. Twitter führte schließlich ein gewichtetes Zählsystem ein, bei dem Sprachen wie Japanisch als „1 Zeichen = 1 Zähleinheit" galten, während bei anderen Sprachen bestimmte Zeichen als „2 Bytes = 1 Zähleinheit" gezählt wurden, um die Waage zwischen den Sprachen auszugleichen.
Auch bei SMS auf Mobiltelefonen gibt es eine ähnliche Eigenheit. Eine im GSM-Standard kodierte SMS erlaubt bis zu 160 Zeichen pro Nachricht, doch sobald auch nur ein einziges Zeichen außerhalb des 7-Bit-GSM-Zeichensatzes enthalten ist — etwa ein Emoji oder ein japanisches Zeichen —, wechselt die Kodierung zu UCS-2 (ungefähr gleichwertig mit UTF-16), und das Limit sinkt schlagartig auf nur noch 70 Zeichen. Dass ein einziges japanisches Zeichen die verfügbare Nachrichtenlänge auf weniger als die Hälfte reduzieren kann, ist ein perfektes reales Beispiel für genau den Zusammenhang zwischen Zeichenkodierung und Byte-Zahl, den dieses Tool messen soll.