java中将中文字符转unicode编码需用string.format("%04x", (int)ch)补零大写后拼接"u"前缀,对bmp外字符应使用codepoints()处理代理对。

Java 中将字符串中的中文字符转为 Unicode 编码(如 u4f60),可以用 Integer.toHexString 配合字符的 Unicode 码点实现,但要注意大小写、补零和前缀处理。
获取每个字符的 Unicode 码点并转十六进制
中文字符在 Java 中是 char(UTF-16),直接用 (int) ch 可得其 Unicode 码点。再用 Integer.toHexString 转成小写十六进制字符串:
-
Integer.toHexString((int) '你')返回"4f60"(不带前缀、无大写、无补零) - 要得到标准 Unicode 转义形式
u4f60,需手动补足 4 位(中文基本都在 BMP 平面)、转大写、加u前缀
手动拼接 uXXXX 格式(适合 BMP 字符)
对每个 char(适用于 U+0000 ~ U+FFFF 的中文),可这样处理:
- 用
String.format("%04x", (int) ch)补零并小写,或String.format("%04X", (int) ch)直接大写 - 拼上前缀:
"\u" + String.format("%04X", (int) ch) - 示例:
'好'→(int)'好' == 22909→String.format("%04X", 22909) == "5977"→"\u5977"
注意:超出 BMP 的字符(如部分 emoji 或生僻字)需用代理对
Java char 是 UTF-16 单元,遇到 U+10000 以上的字符(如 ?U+1F30D),会拆成高低代理对(surrogate pair)。此时不能简单遍历 char 数组:
- 应使用
String.codePoints()流获取真实 Unicode 码点 -
Integer.toHexString(cp)得到完整十六进制(如"1f30d"),再按需补零(通常补 4~6 位)、加前缀 - 若只要
uXXXX形式(仅限 BMP),则跳过或抛异常;若支持U0001F30D(非 Java 原生语法),需自行约定格式
实用工具方法示例
一个安全转义 BMP 内中文的简版方法:
public static String toUnicodeEscape(String s) {
StringBuilder sb = new StringBuilder();
for (char ch : s.toCharArray()) {
if (ch
调用 toUnicodeEscape("你好") 返回 "u4F60u597D"。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











