Unicode 编解码
\\uXXXX/&#NNN;/utf-16 互转
Unicode 编码层次
· Code Point(码点):U+0000 ~ U+10FFFF,总计 1,114,112 个抽象字符位
· BMP(基本平面):U+0000 ~ U+FFFF,单个 16 位码元可表示
· 辅助平面 / Surrogate:U+10000+(如 emoji),UTF-16 需两个码元组合表示
· UTF-8:变长 1-4 字节 · ASCII 兼容 · 中文常用字 3 字节 · emoji 4 字节
· UTF-16:BMP 2 字节 · 辅助平面 4 字节(surrogate pair)· JS String 内部表示
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
前端国际化调试
前端开发者在处理多语言文案时,经常遇到后端返回的 JSON 数据中夹杂着 \uXXXX 或 &#NNN; 格式的 Unicode 转义序列。手动在控制台逐条转换效率极低。本工具支持批量粘贴一整段转义文本,一键解码为可读的中文或特殊符号,快速定位编码错误或缺失字符,节省逐条排查的时间。
短信模板编码校验
运营人员在编辑营销短信或推送通知时,部分平台要求特殊字符(如 ©、™、→)必须使用 &#NNN; 实体编码格式,否则发送后显示为乱码。本工具支持将中文和符号直接转换为对应的十进制或十六进制实体编码,粘贴到模板中即可通过平台校验,确保用户收到的内容显示正确。
Emoji 字符分析
设计师或内容审核员在分析用户昵称、评论中的 Emoji 时,发现某些 Emoji 在数据库里被拆解成多个 \uXXXX 序列(如旗帜、肤色组合)。本工具可以输入这些序列并解码为实际 Emoji 图形,同时反向将 Emoji 转为 UTF-16 编码,帮助理解底层存储结构,排查显示不一致的问题。
古籍数字化校对
古籍整理人员在将扫描版 PDF 转为文本时,OCR 软件常将生僻字识别为乱码或 \uXXXX 序列。本工具支持将乱码序列粘贴后解码,对照原书图片确认该字符是否正确。同时也能将确认后的生僻字编码为 &#NNN; 格式,确保在不同浏览器和系统中稳定显示,避免字形缺失。
IoT 设备协议调试
嵌入式开发者在调试智能设备与服务器的通信协议时,日志中常以 UTF-16 或 \uXXXX 格式输出设备名称、错误码等字符串。本工具可直接将十六进制 UTF-16 数据解码为可读文本,或将调试信息中的转义序列还原,帮助快速定位协议解析错误或字符编码不匹配的问题。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A (Online Unicode Tools) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器端处理,字符数据不上传服务器 | 部分转换需上传至服务器处理 | 依赖人工操作,数据完全本地 |
| 处理速度 | 毫秒级实时转换,输入即出结果 | 受网络延迟影响,通常 1-3 秒 | 逐字符手动对照编码表,数分钟 |
| 离线可用 | 完全离线,无需网络连接 | 必须联网才能使用 | 完全离线,依赖纸质资料 |
| 批量处理 | 支持,可一次性粘贴长文本转换 | 部分工具对长文本有长度限制 | 极低效,不适合批量处理 |
| 编码覆盖 | \uXXXX、&#NNN;、UTF-16 互转 | 通常支持更多格式,如 Base64、URL 编码 | 取决于手头编码表,易出错 |
| 使用门槛 | 打开即用,无需学习成本 | 需在多种工具间切换,操作路径长 | 需具备编码知识,专业门槛高 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例8 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 你好 | \u4f60\u597d | 典型常规场景:中文转 \uXXXX 编码 |
| \u4f60\u597d | 你好 | 典型常规场景:\uXXXX 编码还原为中文 |
| A | \u0041 | 边界 case:ASCII 字符(字母)的编码结果 |
| \u0041 | A | 边界 case:ASCII 字符(字母)的编码还原 |
| \u4f60\u597d | 你好 | 易错 case:用户误将 \u 写成 \U(大写),工具不识别 |
| 你好 | 你好 | 典型常规场景:HTML 十进制实体 &#NNN; 转中文 |
| 你好 | 你好 | 典型常规场景:中文转 HTML 十进制实体 &#NNN; |
| \u0041\u0042\u0043 | ABC | 边界 case:连续多个 \uXXXX 编码的批量还原 |
常见错误对照8 个常踩的坑 · 错误 → 修复
1. 将 HTML 实体 &#NNN; 直接用于非 HTML 上下文
在纯文本文件或 JSON 字符串中写 `A` 表示字母 A在纯文本或 JSON 中直接写字符 `A`;仅在 HTML 文档(.html)或模板引擎中才使用 `A``&#NNN;` 是 HTML/SGML 实体引用,浏览器解析 HTML 时才转换;JSON、XML 属性值、CSS 内容等各自有独立转义规则,混用会导致显示为原文或解析错误
2. 混淆 \uXXXX 与 \UXXXXXXXX(大写 U)
输入 `\U0001F600` 表示 😀输入 `\uD83D\uDE00`(UTF-16 代理对)或直接粘贴 😀 字符JavaScript/JSON 只支持 `\uXXXX`(4 位十六进制),不支持 `\UXXXXXXXX`(8 位)。超出 BMP 的字符需用两个代理对(surrogate pair)表示
3. 把十进制 Unicode 码点当作 HTML 实体直接输入
输入 `128512` 期望得到 😀输入 `😀`(带 &# 前缀和分号结尾)HTML 实体必须用 `&#NNN;` 语法,纯数字码点不会被浏览器识别。工具解码时需明确输入格式:`&#NNN;`、`\uXXXX` 或原始字符
4. 在 \uXXXX 中转义非十六进制字符
输入 `\u00AG` 或 `\uZZZZ`输入 `\u00A9`(版权符号 ©)或 `\u0041`(字母 A)`\u` 后必须跟 4 个合法的十六进制数字(0-9, A-F, a-f)。任何非十六进制字符都会导致 JSON.parse 或 JavaScript 引擎抛出 SyntaxError
5. 将 UTF-16 编码的字节序(BOM)当作普通字符处理
解码 `\uFEFF` 后认为结果文件开头多了一个不可见字符了解 `U+FEFF` 是 BOM(Byte Order Mark),在 UTF-16 LE/BE 文件中用于标记字节序;解码后如需纯文本可手动移除BOM 不是数据内容,是编码标记。Windows 记事本保存 UTF-16 文件时默认添加 BOM,跨平台处理时可能引发意外字符
6. 用 \uXXXX 表示 ASCII 范围内的字符(多此一举)
输入 `\u0048\u0065\u006C\u006C\u006F` 表示 Hello直接输入 `Hello` 或仅在需要转义特殊字符时(如 `\u0022` 表示双引号)使用 \uXXXXASCII 字符(0-127)用 \uXXXX 编码后长度增加 5 倍,且可读性差。仅当字符串必须避免出现某些字符(如嵌入 JSON 的引号)时才必要
7. 将 UTF-16 编码与 UTF-8 编码混为一谈
认为 `\u00E9`(é)在 UTF-8 中也是 2 字节理解 `\uXXXX` 是 UTF-16 码元表示;UTF-8 中 é 编码为 `\xC3\xA9`(2 字节),两者不同UTF-16 用 2 或 4 字节表示码点,UTF-8 用 1-4 字节。`\uXXXX` 直接对应 UTF-16 码元,不是 UTF-8 字节序列。用错编码会导致乱码
8. 在非 JavaScript 环境使用 \uXXXX 语法
在 Python 字符串中写 `"\u0041"` 期望自动转义为 APython 使用 `\u0041` 语法(小写 u,4 位十六进制)同样有效,但注意:Python 3 中 `\U0001F600`(大写 U,8 位)也支持,与 JavaScript 不同`\uXXXX` 是多种语言共用的 Unicode 转义语法,但各语言对超出 BMP 字符的支持方式不同(JS 用代理对,Python 用 `\UXXXXXXXX`)。跨语言移植代码时需验证
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
U+XXXX = 0xXXXX(十六进制) = &#NNN;(十进制) = \uXXXX(转义序列)
变量说明
U+XXXX— Unicode 码点,十六进制表示&#NNN;— HTML 十进制字符引用\uXXXX— JSON/JS 转义序列,十六进制0xXXXX— 十六进制数值,对应码点
示例
字符 '中' 的 Unicode 码点为 U+4E2D。十六进制 0x4E2D = 十进制 20013,即 中。JSON 转义为 \u4E2D。输入 '中' 可得到以上三种编码形式。
适用范围
适用于 Unicode 基本多文种平面(BMP,U+0000~U+FFFF)内的字符。辅助平面字符(如 emoji 🎉 U+1F389)需用代理对(surrogate pair)表示,本工具支持自动转换。
原理图
开发者集成
3 种主流语言 · 复制即用
import json
# \uXXXX 转 Unicode 字符
unicode_escape = "\\u4e2d\\u6587"
text = json.loads(f'"{unicode_escape}"')
print(text) # 中文
# Unicode 字符转 \uXXXX
text = "中文"
escaped = text.encode("unicode_escape").decode("ascii")
print(escaped) # \u4e2d\u6587
# &#NNN; 转 Unicode 字符
html_entity = "中文"
import html
text = html.unescape(html_entity)
print(text) # 中文
# Unicode 字符转 &#NNN;
text = "中文"
entities = "".join(f"&#{ord(c)};" for c in text)
print(entities) # 中文package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// \uXXXX 转 Unicode 字符
unicodeEscape := "\\u4e2d\\u6587"
unquoted, _ := strconv.Unquote(`"` + unicodeEscape + `"`)
fmt.Println(unquoted) // 中文
// Unicode 字符转 \uXXXX
text := "中文"
escaped := ""
for _, r := range text {
escaped += fmt.Sprintf("\\u%04x", r)
}
fmt.Println(escaped) // \u4e2d\u6587
// &#NNN; 转 Unicode 字符
htmlEntity := "中文"
var sb strings.Builder
parts := strings.Split(htmlEntity, ";")
for _, p := range parts {
if strings.HasPrefix(p, "&#") {
code, _ := strconv.Atoi(p[2:])
sb.WriteRune(rune(code))
}
}
fmt.Println(sb.String()) // 中文
// Unicode 字符转 &#NNN;
text2 := "中文"
var sb2 strings.Builder
for _, r := range text2 {
sb2.WriteString(fmt.Sprintf("&#%d;", r))
}
fmt.Println(sb2.String()) // 中文
}// \uXXXX 转 Unicode 字符
const unicodeEscape = '\\u4e2d\\u6587';
const text = JSON.parse(`"${unicodeEscape}"`);
console.log(text); // 中文
// Unicode 字符转 \uXXXX
const text2 = '中文';
const escaped = text2.split('').map(c => '\\u' + c.charCodeAt(0).toString(16).padStart(4, '0')).join('');
console.log(escaped); // \u4e2d\u6587
// &#NNN; 转 Unicode 字符
const htmlEntity = '中文';
const parser = new DOMParser();
const doc = parser.parseFromString(htmlEntity, 'text/html');
console.log(doc.body.textContent); // 中文
// Unicode 字符转 &#NNN;
const text3 = '中文';
const entities = text3.split('').map(c => `&#${c.charCodeAt(0)};`).join('');
console.log(entities); // 中文常见问题
8 个高频疑问
这个工具怎么用?我输入了一段文字,但不知道选哪个模式转换。
为什么我输入 \u4e2d\u6587 解码出来是乱码或问号?
你好 和 \u4f60\u597d 是一回事吗?为什么两个结果不一样?
工具支持 Emoji 吗?我输入 😊 编码后变成了 \uD83D\uDE0A,这是不是错了?
这个工具跟其他在线 Unicode 转换网站有什么区别?哪个更准?
我有一段 JavaScript 代码里的 \u 转义序列,复制进来解码后还是乱码,怎么回事?
工具最多能转多长的文本?有没有字数限制?
为什么我把编码结果存到文本文件,下次打开变成了一堆问号或空白?
相关工具
「Unicode / Hex」下的其他工具