Unicode 到 UTF-8 转换器

将纯 Unicode 文本转换为编程语言嵌入源代码的 \u00E9、\u{1F600} 转义语法,或粘贴转义字符串并解码还原为原始字符。适用于 BMP 字符(4 位转义)以及表情符号等补充平面(可变长度的 \u{...})。

如何在 Unicode 与 UTF-8 转义之间转换

  1. 1

    选择方向

    将字符编码为 `\u` 转义,或将转义字符串解码回文本。

  2. 2

    粘贴输入

    编码用纯文本;解码用包含 `\uXXXX` 或 `\u{XXXXX}` 序列的字符串。

  3. 3

    读取输出

    BMP 字符生成 `\u0041` 形式的 4 位转义;U+FFFF 以上的字符使用 ES6 的 `\u{...}` 形式。

  4. 4

    复制到代码

    将结果放入 JavaScript 字符串、JSON 字面量、配置文件或测试夹具。

各语言中的转义语法

不同语言以不同方式书写同一概念。转换器输出常见的 JavaScript/JSON 形式,但当你在别处书写同一字符时,需要改写成下面这些形式。

各语言的转义语法

语言 BMP (<= U+FFFF) 补充 (> U+FFFF)
JavaScript \u00E9 \u{1F600} (ES6+)
JSON \u00E9 代理对 \uD83D\uDE00
Python \u00e9 \U0001F600
Java \u00e9 代理对
C / C++ \u00e9 \U0001F600
Ruby \u00e9 \u{1F600}
Rust \u{00e9} \u{1F600}
HTML 实体 &#xE9; &#x1F600;
CSS \0000e9 \1F600

为什么表情符号需要长形式

基本多文种平面(BMP)涵盖 U+0000 到 U+FFFF,一切都能放进单个 16 位单元,这正是旧的 \uXXXX 语法的设计目标。表情符号大多位于平面 1(U+1F000 及以上),无法用四位十六进制表示。有两种方案:

  1. ES6 花括号,\u{1F600} 接受任意长度。
  2. UTF-16 代理对,一个字符用两个 \uXXXX 转义。JSON 解析器接受这种形式,通常 JSON 编码器也输出这种形式。

两者解码为同一字符串,但代理对很脆弱:在高位与低位代理之间切断字符串会得到无效的 UTF-16。

常见问题

四位十六进制最大只到 U+FFFF。表情符号从 U+1F000 开始,因此需要 ES6 花括号形式 \u{...},或在受限于旧目标时使用 UTF-16 代理对。本工具对 U+FFFF 以上的一切都使用花括号。

不能作为一对解码。解码器能识别花括号形式 \u{1F600} 和四位 \uXXXX 转义,但它不会把 UTF-16 代理对(JSON 使用的双转义形式)重新组合成单个表情符号:每一半各自解码,无法还原。对 U+FFFF 以上的字符,请粘贴花括号形式 \u{...},这正是编码器输出的形式。

不。像 \u00E9 这样的转义表示码点 U+00E9,而不是 UTF-8 字节序列(那会是 C3 A9)。要查看原始字节,请使用 Unicode 查找工具,它以 HEX 显示 UTF-8 字节。

转换在本次请求的服务器端完成,但不保留任何内容:不记录日志,也不存储你转换的字符串。

相关工具

此工具还提供其他语言版本