如何Encode Emoji
Represent emoji 在 various formats: UTF-8 bytes, Unicode escapes, HTML entities, 和 Base64.
问题
你需要包含 emoji 在系统该 不接受 raw non-ASCII characters, 如 JSON API 或遗留数据库.
前置条件
- Understanding 的 Unicode 代码 points
- 熟悉surrogate pairs
步骤
-
1. Find the emoji code point
Look up the emoji in the Unicode character database. Most emoji are in the U+1F300 to U+1FAFF range. Some emoji use variation selectors (U+FE0F) to request color rendering. Note the full sequence including any selectors.
输入🎉输出U+1F389 -
2. Choose the target format
For JavaScript, use \u{1F389} or the surrogate pair \uD83C\uDF89. For HTML, use 🎉 or the named entity if available. For UTF-8, encode as F0 9F 8E 89. For JSON, the raw emoji is valid if the JSON is UTF-8.
输入🎉输出JS: \uD83C\uDF89 | HTML: 🎉 | UTF-8: F0 9F 8E 89 -
3. Test round-trip fidelity
Decode the representation back to the emoji and verify it renders identically. Some systems strip variation selectors, changing the appearance. Test on multiple platforms if the emoji must render consistently.
输入\uD83C\uDF89输出🎉 ✓
预期结果
encoded representation 的 emoji 该 decodes 到 exact 原始字符开 目标平台.
常见错误
- Emoji renders as a monochrome glyph instead of color
- Append the variation selector U+FE0F to request emoji-style (color) rendering on platforms that support it.
- Surrogate pair is split during string manipulation
- Use code-point-aware string operations. Never split a string at an arbitrary index without checking for surrogate boundaries.
排障指引
- If the emoji shows as a box, the target system lacks a font with that glyph. This is a rendering issue, not an encoding error.
- Zwj sequences (zero-width joiner) create compound emoji like 👨👩👧. Handle them as a single grapheme cluster.
安全限制
- Emoji can be used in homoglyph or ZWJ-based obfuscation attacks. Normalize and inspect emoji sequences in security-sensitive contexts.