Unicode-Escape-Sequenz
Syntax zur Darstellung von Unicode-Zeichen im Quellcode. Variiert je nach Sprache: \u2713 (Python/Java/JS), \u{2713} (JS/Ruby/Rust), \U00012345 (Python/C).
What Are Unicode Escape Sequences?
Unicode escape sequences are a notation for representing Unicode characters in source code using only ASCII characters. Instead of embedding the actual character (which may not be typeable or visible), you write a backslash-based sequence that the language parser converts to the character at compile or parse time.
The exact syntax varies by language, but two forms dominate:
\uXXXX: Four hex digits — covers the Basic Multilingual Plane (U+0000–U+FFFF).\UXXXXXXXX: Eight hex digits — covers all Unicode including supplementary planes (U+0000–U+10FFFF).
Language-by-Language Syntax
# Python
"\u00A9" # © (U+00A9, 4-digit BMP)
"\U0001F600" # 😀 (U+1F600, 8-digit supplementary)
"\N{SNOWMAN}" # ☃ (named character)
"\x00A9" # © (also valid: 2-digit hex byte)
# All identical:
"\u00A9" == "\U000000A9" == "©" # True
// JavaScript
"\u00A9" // © (BMP)
"\u{1F600}" // 😀 (ES6+ brace notation, any code point)
"\uD83D\uDE00" // 😀 (legacy: surrogate pair for supplementary)
// ES6 brace notation is recommended:
"\u{1F1FA}\u{1F1F8}" // 🇺🇸 (flag sequence)
// Java — only \uXXXX (BMP), surrogates needed for supplementary
"\u00A9" // ©
"\uD83D\uDE00" // 😀 (surrogate pair)
// Java has no \U syntax — use char literals or Character.toChars()
// C#
"\u00A9" // ©
"\U0001F600" // 😀
"\x00A9" // ©
// Rust
"\u{A9}" // © (brace notation, variable length)
"\u{1F600}" // 😀
// Go
"\u00A9" // © (rune literal, BMP)
"\U0001F600" // 😀 (rune literal, supplementary)
Java's Unusual Preprocessing
Java processes \uXXXX escapes during lexical preprocessing — before the tokenizer runs. This means a Unicode escape can appear in virtually any context including comments and string literals:
// The following comment contains a \u000A which is a newline!
// This will compile and affect the next line
int x = 1; // \u000A x = 2;
// Effectively parsed as:
// int x = 1;
// x = 2;
This is a subtle Java gotcha: Unicode escapes in comments can inject real source code.
Using Escapes in Practice
# When to use escapes:
# 1. In code that must be ASCII-safe
ARROW = "\u2192" # → RIGHT ARROW
# 2. For control characters
NULL = "\u0000" # NUL
LINE_SEP = "\u2028" # LINE SEPARATOR
# 3. For documentation clarity
ZWJ = "\u200D" # Zero Width Joiner — invisible in source
NBSP = "\u00A0" # Non-Breaking Space — invisible in source
# Named escapes (Python only) — most readable
import unicodedata
"\N{COPYRIGHT SIGN}" # ©
"\N{ZERO WIDTH JOINER}" # (ZWJ)
// ES6+ template literals with escapes
const message = `Copyright \u{A9} 2024 \u{2014} All rights reserved`;
// "Copyright © 2024 — All rights reserved"
Escape vs. Direct Character
In UTF-8 source files, direct characters are generally preferred for readability:
# Readable — direct character
emoji = "😀"
# ASCII-safe — escape (useful in legacy systems)
emoji = "\U0001F600"
# Both produce identical runtime values
"😀" == "\U0001F600" # True
Quick Facts
| Language | BMP syntax | Full range syntax |
|---|---|---|
| Python | \uXXXX |
\UXXXXXXXX or \N{name} |
| JavaScript | \uXXXX |
\u{XXXXX} (ES6+) |
| Java | \uXXXX |
Surrogate pairs only |
| C# | \uXXXX |
\UXXXXXXXX |
| Rust | \u{X} to \u{XXXXXX} |
Same (variable length) |
| Go | \uXXXX |
\UXXXXXXXX |
| CSS | \XXXXXX |
Same (1–6 hex digits) |
Mehr in Programmierung & Entwicklung
U+FFFD (�). Wird angezeigt, wenn ein Decoder ungültige Bytesequenzen antrifft — das …
Zwei 16-Bit-Codeeinheiten (ein High-Surrogate U+D800–U+DBFF + Low-Surrogate U+DC00–U+DFFF), die zusammen ein ergänzendes …
Java strings use UTF-16 internally. char is 16-bit (only BMP). For supplementary …
Kodierung wandelt Zeichen in Bytes um (str.encode('utf-8')); Dekodierung wandelt Bytes in Zeichen …
Unlesbarer Text, der entsteht, wenn Bytes mit der falschen Kodierung dekodiert werden. …
U+0000 (NUL). Das erste Unicode/ASCII-Zeichen, als Zeichenketten-Terminator in C/C++ verwendet. Sicherheitsrisiko: Null-Byte-Injektion …
Python 3 uses Unicode strings by default (str = UTF-8 internally via …
Regex-Muster, die Unicode-Eigenschaften nutzen: \p{L} (beliebiger Buchstabe), \p{Script=Greek} (griechisches Skript), \p{Emoji}. Die …
Rust strings (str/String) are guaranteed valid UTF-8. char type represents a Unicode …
Die „Länge" einer Unicode-Zeichenkette hängt von der Einheit ab: Codeeinheiten (JavaScript .length), …