Werkzeuge
Leitfäden

Hex / ASCII / Unicode

Kodierung

Konvertiert zwischen Text, UTF-8-Hex-Bytes und Unicode-Codepunkten.

100 % clientseitig Ohne Backend
Text
Hex (UTF-8)
Codepunkte
Auf dieser Seite

Was ist ein Hex-/ASCII-/Unicode-Konverter?#

Dieselben Text können auf drei genuinely verschiedene Arten geschrieben werden, und dieses Werkzeug lässt Sie alle drei zugleich betrachten:

  • Text — die wörtlichen Zeichen, wie Sie sie tippen und lesen würden (Hello 世界 🌍).
  • Hex-Bytes — die rohe UTF-8-Bytefolge in hexadezimal, ein Byte pro Paar (48 65 6C 6C 6F 20 ...). Das ist, was tatsächlich über ein Netzwerk reist oder in einer Datei sitzt.
  • Codepunkte — die Unicode-Skalarwerte, ein U+XXXX pro Zeichen (U+0048 U+0065 ... U+1F30D). So nummeriert Unicode selbst Zeichen, unabhängig von jeder Byte-Kodierung.

Der Grund, warum diese drei Sichten zählen, ist, dass sie nicht dieselbe Länge sind, sobald Sie ASCII verlassen — und das ist die einzige Quelle von mehr Textkodierungs-Verwirrung als alles andere. Ein Zeichen ist ein Codepunkt, aber es kann ein bis vier Bytes in UTF-8 belegen. Das Globus-Emoji 🌍 ist ein einzelnes Zeichen (U+1F30D), aber in UTF-8 ist es vier Bytes (F0 9F 8C 8D). Wenn Sie je eine String-Länge falsch gezählt, eine Datenbank einen String als „zu lang“ abgelehnt oder ein Teilstring-Schnitt in der Mitte eines Zeichens gelandet ist, sind Sie dieser Lücke schon begegnet.

Bearbeiten Sie eine der drei Darstellungen und die anderen beiden werden sofort abgeleitet. Der Parser ist tolerant: Hex-Eingabe akzeptiert Leerzeichen, Doppelpunkte, Bindestriche, 0x-Präfixe; Codepunkt-Eingabe akzeptiert U+, \u, 0x oder bloßes Hex, getrennt durch Leerzeichen, Kommas oder Semikolons.

Verwendung#

  1. Verwenden Sie die Modusauswahl über dem Eingabefeld, um zu erklären, was Sie tippen: Text, Hex oder Codepunkte.
  2. Fügen Sie in das Eingabefeld ein oder bearbeiten Sie es. Die anderen beiden Sichten füllen sich rechts automatisch.
  3. Verwenden Sie Kopieren neben einem der drei Ergebnisfelder, um jene Darstellung zu übernehmen.
  4. Beispiel lädt Hello 世界 🌍, sodass Sie sehen, wie ASCII, CJK und ein Emoji sich jeweils unterschiedlich abbilden. Leeren leert alles.

Eckpunkte#

  • Drei Sichten, eine Quelle der Wahrheit. Bearbeiten Sie die Darstellung, die Sie gerade haben; die anderen werden berechnet, nie von Hand gepflegt.
  • UTF-8-Bytes, nicht Latin-1. Die Hex-Ausgabe ist die echte On-the-wire-UTF-8-Bytefolge, die fast jedes moderne System verwendet — nicht die veraltete Annahme eines Byte pro Zeichen.
  • Codepunkt-bewusst, einschließlich astraler Zeichen. for...of-Iteration bedeutet, dass ein Emoji als ein einzelner Codepunkt zählt, nicht als zwei Surrogat-Hälften, sodass U+1F30D das ist, was Sie sehen — niemals D83C DF0D.
  • Streng auf dem Rückweg. Hex-Bytes, die kein gültiges UTF-8 bilden (eine Zeichenfolge ungerader Länge oder ein herrenloses Fortsetzungsbyte), werden mit einem klaren Fehler gemeldet, statt in verstümmelten Text dekodiert zu werden. Codepunkte außerhalb des gültigen Bereichs und einzelne Surrogate (U+D800–U+DFFF) werden abgelehnt.

Konkretes Beispiel#

Laden Sie Beispiel, um Hello 世界 🌍 zu erhalten, und die drei abgeleiteten Sichten sind:

Text:       Hello 世界 🌍
Hex bytes:  48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D
Code points: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D

Die ASCII-Buchstaben H e l l o sind der langweilige Teil: je ein Byte, Codepunkte U+0048 bis U+006F. Der interessante Teil ist der Rest:

  • 世 (U+4E16) sind drei UTF-8-Bytes: E4 B8 96. 界 (U+754C) sind ebenfalls drei Bytes: E7 95 8C. Ein Zeichen, aber kein einziges Byte.
  • 🌍 (U+1F30D) sind vier UTF-8-Bytes: F0 9F 8C 8D. Der Codepunkt liegt über U+FFFF, deshalb lebt er in Unicodes astraler Ebene und braucht eine 4-Byte-UTF-8-Sequenz — und ist dennoch ein einzelnes Zeichen, ein Eintrag in der Codepunkt-Liste.

Führen Sie das Experiment umgekehrt: Schalten Sie den Modus auf Codepunkte, fügen Sie U+1F600 U+1F604 ein und beobachten Sie, wie sowohl der Text (😄 😄-familie Emoji) als auch das UTF-8-Hex erscheinen. Genau dieser Round-Trip ist es, wie Sie bestätigen, welche Bytes zu welchem Zeichen gehören.

FAQ#

Warum braucht mein Emoji vier Hex-Bytes, aber nur einen Codepunkt?#

Weil UTF-8 eine Kodierung variabler Breite ist. Codepunkte unter U+0080 passen in ein Byte; U+0080–U+07FF brauchen zwei; U+0800–U+FFFF drei; und alles ab U+10000 (die meisten Emoji, historische Schriften, musikalische Symbole) braucht vier. Der Codepunkt ist Unicodes Name für das Zeichen; die Bytes sind, wie UTF-8 es zufällig speichert. Selbes Zeichen, zwei verschiedene Zahlen.

Was ist der Unterschied zwischen U+XXXX und \uXXXX?#

Sie beziehen sich auf denselben Codepunkt, stammen aber aus verschiedenen Welten. U+0041 ist Unicodes eigene Notation. A ist das Escape, das in JavaScript-, Java- und C-String-Literalen verwendet wird. Der Haken: \uXXXX hält nur vier Hex-Ziffern, deshalb kann es einen astralen Codepunkt wie U+1F30D nicht direkt ausdrücken — Sprachen, die \u verwenden, brauchen entweder ein Surrogatpaar (🌍) oder eine erweiterte Syntax wie \u{1F30D}. Die Codepunkt-Eingabe dieses Werkzeugs akzeptiert beide Formen.

Ich habe Hex-Bytes eingefügt und einen „ungültiges UTF-8“-Fehler erhalten. Was heißt das?#

Die Bytes, die Sie eingefügt haben, bilden keine legale UTF-8-Sequenz — meistens, weil die Hex-Zeichenfolge eine ungerade Länge hat (ein halbes Byte fehlt), ein führendes Byte eine Multibyte-Sequenz beansprucht, die die folgenden Bytes nicht vervollständigen, oder die Daten tatsächlich in etwas anderem als UTF-8 kodiert waren (GBK, Shift-JIS, rohes Latin-1). Der Dekodierer verwendet den strengen Modus, sodass das Problem gemeldet wird, statt stillschweigend Ersetzungszeichen zu erzeugen.

Kann ich das verwenden, um „echte“ Zeichen in einem String zu zählen?#

Ja — die Codepunkt-Anzahl ist die Anzahl, die ein Nutzer sich denken würde, und das ist, worauf die meisten UIs begrenzen sollten. Beachten Sie, dass Hello 世界 🌍 nach Codepunkten 10 Zeichen sind, obwohl es in UTF-8 17 Bytes sind und in JavaScript 11 UTF-16-Code-Einheiten (string.length). Wenn Sie ein Zeichen-Budget für einen Tweet oder ein Formularfeld brauchen, zählen Sie Codepunkte, nicht Bytes und nicht string.length.