Home

Zeichenlängen

Zeichenlänge bezeichnet die Anzahl der Zeichen in einer Zeichenkette. Der Begriff ist nicht eindeutig, weil Zeichen unterschiedlich gezählt werden können. Grundsätzlich unterscheidet man zwischen der Länge nach Unicode-Codepunkten (die einzelnen, normierten Einheiten der Unicode-Codierung) und der Länge nach Grapheme, also grafischen Einheiten, die vom Benutzer als ein Zeichen wahrgenommen werden können. Ein Grapheme kann aus mehreren Codepunkten bestehen, etwa ein Buchstabe mit diakritischem Zeichen oder ein Emoji, das aus mehreren Teilzeichen zusammengesetzt ist.

Herausforderungen ergeben sich durch die Vielfalt von Codierungen und Darstellungen. Bei Normalisierungsversionen (zum Beispiel NFC/NFD) kann

Technisch betrachtet speichern Textsysteme Zeichen in unterschiedlichen Formen. UTF-8 verwendet variabel viele Bytes pro Codepunkt (1–4

Praktisch bedeuten diese Unterschiede, dass bei Validierung, Festlegung von Längenlimits für Felder, UI-Trunkierung oder Speicherplanung zwischen

sich
die
Anzahl
der
Codepunkte
ändern,
obwohl
der
angezeigte
Grapheme
gleich
bleibt.
Auch
ZWJ-
Sequenzen
und
Varianten
von
Emoji
ermöglichen
mehrere
Darstellungseinheiten
für
ein
einziges
sichtbares
Zeichen.
Außerdem
unterscheiden
sich
Implementationen
in
der
Zählung
von
Bytes,
Codepunkten
und
Graphemen
je
nach
Programmiersprache,
Bibliothek
oder
Datenbank.
Byte),
UTF-16
nutzt
oft
zwei
Codeeinheiten
für
einige
Zeichen.
Programmiersprachen
bieten
unterschiedliche
Funktionen
zur
Ermittlung
der
Zeichenlänge,
beispielsweise
durch
Byte-Längen,
Codepunkt-Längen
oder
Grapheme-Längen.
In
Datenbanken
ergeben
sich
ähnliche
Unterschiede:
manche
Funktionen
zählen
Bytes,
andere
zählen
Zeichen
oder
Unicode-Codepunkte.
Spezifische
SQL-Funktionen
wie
LENGTH,
CHAR_LENGTH
oder
CHARACTER_LENGTH
geben
je
nach
System
unterschiedliche
Ergebnisse.
Byte-Längen,
Zeichenlängen
und
Graphemen
unterschieden
werden
muss.
Für
benutzernahe
Anzeigen
empfiehlt
es
sich,
Grapheme
zu
zählen,
während
Datenvalidierung
oft
Codepunkt-
oder
Zeichenlängen
zugrunde
legt.