java中将“u4f60u597d”转为“你好”,需手动解析u开头的十六进制unicode转义序列;推荐用stringescapeutils.unescapejava(),或正则匹配uxxxx并转为char。

Java 中将 Unicode 编码字符串(如 "\u4f60\u597d")转成可读汉字,关键在于正确识别并解析以 u 开头的十六进制 Unicode 转义序列。这不是简单的字符集解码(如 UTF-8 字节解码),而是对 Java 字符串字面量中常见的转义格式做“反向转义”处理。
识别 Unicode 转义格式
Java 源码中写 "u4f60",编译器会自动转为汉字“你”。但如果你从外部(如配置文件、HTTP 请求、JSON)拿到的是字面字符串 "\u4f60\u597d"(注意是两个反斜杠),那它就是一个普通字符串,不会被自动解析——必须手动处理。
常见错误:直接用 new String(bytes, "UTF-8") 无效,因为输入不是 UTF-8 字节,而是 ASCII 字符组成的转义文本。
使用 Apache Commons Text(推荐)
最简洁可靠的方式是借助 StringEscapeUtils.unescapeJava(),它专为处理 Java 风格转义设计,支持 uXXXX、
、" 等:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 添加依赖(Maven):
org.apache.commons
commons-text
1.12.0 - 代码示例:
import org.apache.commons.text.StringEscapeUtils; String unicodeStr = "\u4f60\u597d\u4e16\u754c"; // 注意双反斜杠 String result = StringEscapeUtils.unescapeJava(unicodeStr); System.out.println(result); // 输出:你好世界
不依赖第三方库的手动解析
若不能引入外部包,可按规则遍历字符串,匹配 \uXXXX 并转换:
- 用正则
"\\u([0-9a-fA-F]{4})"匹配所有u后跟 4 位十六进制数的部分 - 对每个匹配,用
Integer.parseInt(hex, 16)转为 int,再强转为char - 用
String.replaceFirst()或Matcher.appendReplacement()逐个替换
示例片段:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static String unescapeUnicode(String input) {
Pattern pattern = Pattern.compile("\\u([0-9a-fA-F]{4})");
Matcher matcher = pattern.matcher(input);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String hex = matcher.group(1);
int codePoint = Integer.parseInt(hex, 16);
matcher.appendReplacement(sb, Character.toString((char) codePoint));
}
matcher.appendTail(sb);
return sb.toString();
}
注意边界情况
某些场景需额外判断:
-
超平面字符(如 emoji):
uD83DuDE00是代理对(surrogate pair),单靠(char)codePoint会出错;应改用Character.toChars(codePoint)并拼接字符串 -
混合内容:原字符串可能含普通文字+转义,如
"Hello\u4f60",上述方法均能保留非转义部分 -
JSON 场景:如果数据来自 JSON,建议优先用 Jackson/Gson 解析,它们默认处理
u转义,无需手动干预
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










