Unicode Cheatsheet
Unicode er en international standard der giver hvert tegn i verden et unikt nummer — et såkaldt code point. Det gælder bogstaver, tegnsætning, matematiske symboler, box-tegn og emojis.
I Java skriver du et unicode-tegn som \uXXXX hvor XXXX er code pointet i hexadecimalt:
System.out.println("\u2665"); // ♥
System.out.println("\u2713"); // ✓
System.out.println("\u2718"); // ✘
En emoji som 💩 har unicode-koden U+1F4A9. Men Unicode siger kun hvad tegnet er — ikke hvordan det skal se ud. Det beslutter platformen selv. Derfor ser den samme emoji forskellig ud på Apple, Google og Windows. Send en 😂 fra en iPhone og modtageren på Android ser måske noget lidt anderledes.
Box-tegn og symboler herunder er meget mere stabile på tværs af platforme.
| Tegn | Kode | Java |
|---|---|---|
| → | U+2192 | "\u2192" |
| ← | U+2190 | "\u2190" |
| ↑ | U+2191 | "\u2191" |
| ↓ | U+2193 | "\u2193" |
| ► | U+25BA | "\u25BA" |
| » | U+00BB | "\u00BB" |
| Tegn | Kode | Java | Brug |
|---|---|---|---|
| ✓ | U+2713 | "\u2713" | Succes |
| ✘ | U+2718 | "\u2718" | Fejl |
| ★ | U+2605 | "\u2605" | Score/favorit |
| ☆ | U+2606 | "\u2606" | Tom stjerne |
| ♥ | U+2665 | "\u2665" | Liv/health |
| ♦ | U+2666 | "\u2666" | Diamant |
| • | U+2022 | "\u2022" | Bullet point |
| … | U+2026 | "\u2026" | Ellipse |
| © | U+00A9 | "\u00A9" | Copyright |
| Tegn | Kode | Java |
|---|---|---|
| ─ | U+2500 | "\u2500" |
| │ | U+2502 | "\u2502" |
| ┌ | U+250C | "\u250C" |
| ┐ | U+2510 | "\u2510" |
| └ | U+2514 | "\u2514" |
| ┘ | U+2518 | "\u2518" |
Eksempel:
┌─────────────┐
│ Eksempel │
└─────────────┘
| Tegn | Kode | Java |
|---|---|---|
| ═ | U+2550 | "\u2550" |
| ║ | U+2551 | "\u2551" |
| ╔ | U+2554 | "\u2554" |
| ╗ | U+2557 | "\u2557" |
| ╚ | U+255A | "\u255A" |
| ╝ | U+255D | "\u255D" |
Eksempel:
╔═════════════╗
║ Eksempel ║
╚═════════════╝
ANSI escape codes er en anden standard — ikke Unicode, men gammel terminalteknologi fra 1970’erne der stadig bruges i dag. De virker i IntelliJ’s terminal men ikke altid i Windows CMD.
| Kode | Effekt |
|---|---|
\u001B[0m | Reset — husk altid denne til sidst! |
\u001B[1m | Fed (bold) |
\u001B[3m | Kursiv |
\u001B[4m | Understreget |
\u001B[31m | Rød |
\u001B[32m | Grøn |
\u001B[33m | Gul |
\u001B[34m | Blå |
\u001B[35m | Lilla |
\u001B[36m | Cyan |
Glem ikke
\u001B[0mtil sidst — ellers fortsætter farven i resten af terminalen.
Samme princip som tekstfarver — bare andre koder:
| Kode | Baggrund |
|---|---|
\u001B[40m | Sort |
\u001B[41m | Rød |
\u001B[42m | Grøn |
\u001B[43m | Gul |
\u001B[44m | Blå |
\u001B[45m | Lilla |
\u001B[46m | Cyan |
\u001B[47m | Hvid |
Du kan kombinere tekst- og baggrundsfarve frit:
// Hvid tekst på rød baggrund
System.out.println("\u001B[41m\u001B[37m" + " GAME OVER " + "\u001B[0m");
// Sort tekst på gul baggrund
System.out.println("\u001B[43m\u001B[30m" + " ADVARSEL " + "\u001B[0m");
Og i TextStyle enum:
BG_RED("\u001B[41m"),
BG_GREEN("\u001B[42m"),
BG_YELLOW("\u001B[43m"),
BG_BLUE("\u001B[44m"),
BG_CYAN("\u001B[46m"),
public void printTitle(String message) {
String line = "\u2550".repeat(message.length() + 4);
System.out.println("\u001B[36m\u001B[1m" +
"\u2554" + line + "\u2557\n" +
"\u2551 " + message + " \u2551\n" +
"\u255A" + line + "\u255D" +
"\u001B[0m");
}
public void printSuccess(String message) {
System.out.println("\u001B[32m\u001B[1m" + "\u2713 " + message + "\u001B[0m");
}
public void printError(String message) {
System.out.println("\u001B[31m" + "\u2718 " + message + "\u001B[0m");
}
Forventet output:
╔════════════════╗
║ Gæt et tal! ║
╚════════════════╝
✓ Tillykke Alice! Du gættede det på 3 forsøg!
✘ Ingen flere forsøg! Tallet var 42.
De unicode-tegn vi så tidligere (✓ ♥ ★) ligger alle under U+FFFF og kan skrives direkte som \uXXXX i Java.
Emojis er nyere og ligger over U+FFFF — fx er 🎉 U+1F389. Java bruger internt 16-bit chars, så tegn over U+FFFF kræver et såkaldt surrogate pair — to \uXXXX koder i forlængelse af hinanden:
// 🎉 som surrogate pair — teknisk korrekt men ulæseligt
System.out.println("\uD83C\uDF89");
// 🎉 copy-pastet direkte ind i koden — meget bedre
System.out.println("🎉");
Til emojis er copy-paste den rigtige løsning. IntelliJ håndterer det fint så længe filen er gemt som UTF-8 (hvilket er default).
Emojis kan kopieres direkte ind i IntelliJ. Husk at de ser forskellige ud på forskellige platforme!
emojipedia.org — søg og copy-paste direkte ind i IntelliJ.