UTF-8-Byte-Größe berechnen
Eingaben
| Text | Héllo |
|---|
UTF-8-Byte-Größe berechnen
Geben Sie einen beliebigen Text ein, um seine UTF-8-Byte-Größe, UTF-16-Byte-Größe und die Anzahl der Zeichen (Codepunkte) zu ermitteln. ASCII-Buchstaben belegen je ein UTF-8-Byte, Umlaute und Akzente zwei, die meisten anderen Schriften drei und Emojis vier — deshalb kann die Byte-Größe einer Zeichenkette größer sein als die Anzahl der sichtbaren Zeichen.
Eingaben
Text
Ergebnisse
Geben Sie einen Wert ein, um die Ergebnisse zu sehen.
Größe
UTF-8-Byte-Größe
Eine Textzeichenkette und die Zahl der Bytes, die sie belegt, sind nicht dasselbe. Auf dem Bildschirm ist ein Wort eine Folge von Zeichen; in der Speicherung und bei der Übertragung ist es eine Folge von Bytes, und die beiden Zahlen stimmen selten überein. Dieser Rechner nimmt einen Text und gibt drei Werte aus: wie viele Zeichen (Unicode-Codepunkte) er enthält, wie viele Bytes er als UTF-8 belegt und wie viele Bytes er als UTF-16 belegt. Das ist nützlich, um Datenbankspalten zu dimensionieren, Werte gegen API- und Längenbeschränkungen zu prüfen und zu verstehen, warum eine kurz wirkende Zeichenkette überraschend groß sein kann.
Zeichen gegenüber Bytes
Ein Zeichen ist eine Schrifteinheit — ein Buchstabe, eine Ziffer, ein Ideogramm, ein Emoji. Unicode weist jedem eine Zahl zu, den sogenannten Codepunkt, geschrieben etwa als U+00E9. Ein Byte ist eine Speichereinheit aus acht Bit. Eine Kodierung ist die Regel, die Codepunkte in Bytes umwandelt, und verschiedene Kodierungen ergeben für denselben Text unterschiedliche Byte-Zahlen.
Bei reinem Deutsch fällt der Unterschied leicht durch, weil in den gängigen Kodierungen jedes ASCII-Zeichen zufällig eine glatte Zahl von Bytes ergibt. Sichtbar wird die Differenz, sobald der Text Umlaute, nichtlateinische Schriften oder Emojis enthält.
Wie UTF-8 ein Zeichen bemisst
UTF-8 ist eine Kodierung variabler Breite: Ein Zeichen belegt je nach Codepunkt ein bis vier Bytes.
U+0000–U+007F(ASCII: lateinische Buchstaben ohne Akzent, Ziffern, gängige Satzzeichen): 1 ByteU+0080–U+07FF(lateinische Akzente und Umlaute, Griechisch, Kyrillisch, Hebräisch, Arabisch): 2 BytesU+0800–U+FFFF(die meisten CJK- und anderen Schriften): 3 BytesU+10000und höher (Emojis und seltene Zeichen): 4 Bytes
Weil ASCII-Zeichen ein Byte bleiben, ist UTF-8 abwärtskompatibel zu ASCII — ein wesentlicher Grund, warum es zur Standardkodierung des Webs und von Textdateien wurde.
Wie UTF-16 ein Zeichen bemisst
UTF-16 speichert die meisten Zeichen in einer einzigen 16-Bit-Codeeinheit, also zwei Bytes. Zeichen oberhalb von U+FFFF — Emojis und andere seltene Symbole — werden als Surrogatpaar aus zwei Codeeinheiten gespeichert und belegen damit vier Bytes. Einen Ein-Byte-Fall gibt es nicht: Selbst ein einfacher ASCII-Buchstabe kostet in UTF-16 zwei Bytes. Dies ist das interne Zeichenkettenformat von Sprachen wie Java, C# und JavaScript.
Durchgerechnetes Beispiel
Nehmen wir den Text Héllo.
Es sind 5 Zeichen, aber 6 UTF-8-Bytes, weil é in den Zwei-Byte-Bereich fällt. In UTF-16 ist jedes der 5 Zeichen eine einzelne Zwei-Byte-Codeeinheit, was 10 Bytes ergibt.
Nehmen wir nun ein einzelnes Emoji, 😀 (U+1F600). Es ist ein Zeichen, liegt aber oberhalb von U+FFFF. UTF-8 kodiert es als vier Bytes, und UTF-16 speichert es als Surrogatpaar, ebenfalls vier Bytes — die Zeichenanzahl ist jedoch nur 1.
Warum die Byte-Größe wichtig ist
Grenzen in realen Systemen werden meist in Bytes gezählt, nicht in Zeichen. Eine VARCHAR(255)-Spalte kann je nach Datenbank und Zeichensatz Bytes oder Zeichen begrenzen; Beschränkungen für die Nachrichtenlänge, API-Nutzlastfelder, HTTP-Headergrößen und Formularprüfungen werden häufig in Bytes ausgedrückt. Die UTF-8-Byte-Größe im Voraus zu messen verrät, ob ein Wert passt und wie viel Speicher oder Bandbreite er verbraucht — was eine Zeichenanzahl allein nicht leisten kann.
Verwandte Rechner
Um die tatsächlichen Byte-Werte einer Zeichenkette als Binär-, Hexadezimal- und Dezimalcodes zu sehen, nutzen Sie den Text in Binär / Hex / ASCII umwandeln. Um die Größe von Text nach der Base64-Verpackung für die Übertragung zu messen, siehe den Base64-Kodierungs-Overhead-Rechner. Und um abzuschätzen, wie viel Information eine Zeichenkette trägt — statt wie viel Platz sie belegt — berechnet der Shannon-Entropie berechnen ihre Entropie.
Häufig gestellte Fragen (FAQ)
Warum ist die Byte-Größe größer als die Zeichenanzahl?
Ein Zeichen ist das, was man sieht; ein Byte ist die Art, wie es gespeichert wird. In UTF-8 passen nur die einfachen ASCII-Zeichen (lateinische Buchstaben ohne Akzent, Ziffern, gängige Satzzeichen) in ein einzelnes Byte. Umlaute und Akzentzeichen wie é belegen zwei Bytes, die meisten anderen Schriften drei und Emojis vier. Jeder Text mit Nicht-ASCII-Zeichen belegt also mehr Bytes, als er Zeichen hat.
Bei UTF-16 ist der Unterschied bei ASCII-Text sogar noch größer, da dort jedes Zeichen mindestens zwei Bytes belegt.
Worin unterscheiden sich UTF-8 und UTF-16?
Beide sind Verfahren, um Unicode-Zeichen in Bytes umzuwandeln. UTF-8 nutzt eine variable Breite von einem bis vier Bytes pro Zeichen und ist abwärtskompatibel zu ASCII, was es zur vorherrschenden Kodierung im Web und in Dateien macht. UTF-16 nutzt zwei Bytes für die meisten Zeichen und vier für die seltenen jenseits der Basic Multilingual Plane (etwa Emojis); es ist die übliche In-Memory-Darstellung von Sprachen wie Java, C# und JavaScript.
Für überwiegend lateinischen Text ist UTF-8 kompakter; bei Texten mit vielen ostasiatischen Schriften sind beide oft vergleichbar.
Wie viele Bytes belegt ein Zeichen?
In UTF-8 hängt es vom Codepunkt ab: U+0000–U+007F (ASCII) ein Byte, U+0080–U+07FF (lateinische Akzente, Griechisch, Kyrillisch, Hebräisch, Arabisch) zwei Bytes, U+0800–U+FFFF (die meisten CJK- und anderen Schriften) drei Bytes und U+10000 und höher (Emojis, seltene Zeichen) vier Bytes.
In UTF-16 belegen dieselben Zeichen zwei Bytes bis U+FFFF und vier Bytes darüber, wo sie als Surrogatpaar gespeichert werden.
Wann ist die Byte-Größe wichtig?
Speicher und Übertragung werden in Bytes gemessen, nicht in Zeichen. Eine als VARCHAR(255) deklarierte Datenbankspalte kann je nach System und Zeichensatz Bytes oder Zeichen begrenzen; API-Felder, Längenbeschränkungen für Nachrichten und Formulargrenzen werden häufig in Bytes angegeben. Die UTF-8-Byte-Größe zu kennen hilft abzuschätzen, ob ein Wert passt und wie viel Speicher oder Bandbreite er beansprucht.
Weitere Empfehlungen
Text in Binär / Hex / ASCII umwandeln
Geben Sie beliebigen Text ein, um ihn als Binärzahl, Hexadezimalwert und dezimale Zeichencodes zu sehen. Binär und Hex folgen der UTF-8-Bytefolge, die Dezimalspalte listet den Unicode-Codepunkt jedes Zeichens auf – bei reinem englischem Text der bekannte ASCII-Wert.