Bảng tra cứu escape \n \t \u | Cheat sheet nhanh cho lập trình viên
Giữ một bảng \n \t \u trong đầu (hoặc bookmark bài này) nhanh hơn google mỗi lần viết string. \n = xuống dòng, \t = tab, \\ = một backslash thật, \uXXXX = Unicode. Cần chuyển nhanh giữa “xuống dòng thật” và chữ \n trên một dòng → Escape Sequence (trình duyệt, không upload). Cần debug JSON / path Windows / double-escape → đọc bài debug sâu.
Bạn đang viết message lỗi tiếng Việt nhiều dòng, hoặc paste log vào ticket Jira. Đột nhiên cần nhớ: tab là \t hay \b? NBSP viết \u thế nào? Bài này là cheat sheet tra cứu nhanh — không đi sâu serializer JSON hay C:\\Users\\... (đã có bài riêng). Mục tiêu: mở tab, nhìn bảng, copy ví dụ, xong trong vài phút.
Khi nào mở bài này
- Viết literal string / template có xuống dòng, tab, dấu ngoặc
- Đọc tài liệu API ghi
\r\nmà quên nghĩa - Copy text từ Docs và nghi “space giả”
- Chuẩn bị input cho unit test một dòng
Không thay: bài Escape sequence — debug JSON, log, Windows khi bạn đang thấy chữ \n trên UI hoặc path backslash nổ trong JSON.
Bảng tra cứu chính
| Viết trong code | Tên / code point | Ghi nhớ nhanh |
|---|---|---|
\n | Newline / LF / U+000A | Xuống dòng Unix & hầu hết API hiện đại |
\r | Carriage return / CR / U+000D | Ít dùng một mình; hay đi với Windows |
\r\n | CRLF | Xuống dòng Windows cổ điển (file text, một số protocol) |
\t | Horizontal tab / U+0009 | Tab — cột TSV, indent cũ |
\\ | Backslash | Một ký tự \ thật trong chuỗi |
\" | Double quote | Ngoặc kép trong string dùng "..." |
\' | Single quote | Trong string dùng '...' |
\0 | NUL | Ký tự null — cẩn thận với C API / binary |
\b | Backspace | Hiếm trong web app — đừng nhầm với \t |
\f | Form feed | Hiếm; gặp trong một số dump PDF/text cũ |
\v | Vertical tab | Rất hiếm trong frontend |
\uXXXX | Unicode 4 hex | Ví dụ \u00A0 = NBSP |
\u{XXXXX} | Unicode code point (ES6+) | Emoji / ngoài BMP: \u{1F600} |
\xHH | Byte hex (nhiều ngôn ngữ) | \x0A ≈ newline trong JS/Python string |
Ví dụ copy nhanh (JavaScript)
const lines = "Dòng 1\nDòng 2"; // có newline thật giữa hai câu
const cols = "a\tb\tc"; // tab giữa cột
const pathHint = "C:\\\\temp\\\\a"; // hai tầng \\ → một \ trên từng cấp (xem bài Windows nếu JSON)
const nbsp = "A\u00A0B"; // A + NBSP + B — length 3, không phải space thường
const smile = "\u{1F600}"; // 😀
Ví dụ Python
s = "Dòng 1\nDòng 2"
tab = "a\tb"
# Raw string: r"\n" là hai ký tự \ và n — không xuống dòng
raw = r"\n"
assert raw == "\\n"
Ví dụ C# (thường gặp ở team outsource .NET)
var multi = "Dòng 1\nDòng 2";
var verbatim = @"C:\temp\a"; // verbatim: backslash ít cần escape
var unicode = "A\u00A0B";
Hai chiều: Escape vs Unescape
Hiểu đúng chiều trước khi bấm tool:
| Hướng | Input | Output | Dùng khi |
|---|---|---|---|
| Escape | Text có xuống dòng/tab thật | Một dòng chứa \n, \t | Nhét vào JSON mẫu thủ công, ghi chú ticket một dòng, sinh literal |
| Unescape | Chuỗi có chữ \n \t | Xuống dòng/tab thật | Đọc message đã escape, xem lại nội dung dễ đọc |
Trên công cụ Escape Sequence:
- Dán đoạn text (có thể là log ngắn — tránh secret)
- Bấm Mã hóa (Escape) hoặc Giải mã (Unescape)
- Sao chép kết quả
Chạy local trên trình duyệt — phù hợp thử nhanh trước khi dán vào test.
Unicode hay gặp khi làm tiếng Việt / văn phòng
Không phải lúc nào cũng \n. Copy từ Word, Slack, PDF sang code hay mang “rác”:
| Escape | Ký tự | Triệu chứng |
|---|---|---|
\u00A0 | NBSP | trim() không hết; split theo space sai |
\u200B | Zero-width space | Chuỗi trông giống nhau nhưng === false |
\uFEFF | BOM | File UTF-8 có BOM — JSON parse lỗi ký tự đầu |
\u201C / \u201D | “ ” cong | Copy từ Docs — không phải " ASCII |
\u2026 | … | Ellipsis một ký tự, khác ... ba dấu chấm |
Mẹo: nghi space giả → Escape đoạn text trên tool hoặc log charCodeAt / codePointAt từng vị trí. Thấy 160 (0xA0) thay vì 32 là NBSP.
Phân biệt nhẹ với HTML và URL (đừng nhầm tool)
| Loại | Ví dụ | Tool / ngữ cảnh |
|---|---|---|
Escape string (\n) | "a\nb" | Bài này + Escape Sequence |
| Escape HTML | <div> | HTML escape — chống XSS khi innerHTML |
| Encode URL | %20, %C3%A1 | URL encode — query/path |
Cùng chữ “escape” nhưng ba lớp khác nhau. Dùng nhầm HTML escape cho newline trong JSON sẽ không ra \n.
Mini cheat theo ngôn ngữ (chỉ khác biệt hay quên)
| Chủ đề | JS / TS | Python / ghi chú |
|---|---|---|
| Newline trong literal | "a\nb" hoặc template ` a\nb ` | "a\nb" / '''...''' nhiều dòng |
| Raw string | Không có r"..." chuẩn — dùng String.raw | r"\n" = litereal backslash+n |
| Unicode dài | \u{1F600} | \U0001F600 hoặc \N{...} |
| Hex byte | \x0A | \x0a trong bytes/str tùy ngữ cảnh |
Cần bảng JSON wire / \\\\ trong path Windows → không mở rộng ở đây; xem bài debug sâu.
Case study: viết assert một dòng
Bạn muốn unit test message:
Thanh toán thất bại
Vui lòng thử lại
Trong test runner thích một dòng:
expect(msg).toBe("Thanh toán thất bại\nVui lòng thử lại");
Cách làm nhanh:
- Gõ hai dòng trong editor
- Dán vào Escape Sequence → Escape
- Copy chuỗi có
\nvàotoBe(...)
Ngược lại: QA gửi "Thanh toán thất bại\nVui lòng thử lại" trong Excel một ô — Unescape để xem đúng hai dòng trước khi log bug.
Checklist 30 giây trước khi commit string
- Xuống dòng cố ý →
\n(hoặc template nhiều dòng), không paste NBSP từ Docs - Cần tab cột →
\t, không lẫn\b - Một backslash thật trong path string → nhớ
\\trong literal thường - Emoji / ký tự lạ →
\u{...}hoặc paste UTF-8 thẳng nếu team cho phép - Chỉ cần đổi chiều hiển thị → tool Escape/Unescape local
- Thấy
\ntrên UI hoặc JSON lỗi path → chuyển bài debug sâu
Tóm tắt
Bảng trên đủ cho 90% lần viết \n \t \u hàng ngày. Bookmark bài này như cheat sheet; dùng tool escape sequence khi cần đổi chiều nhanh; mở debug JSON/Windows khi bug nằm ở lớp serializer.