You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中将十六进制字符串转换为Unicode字符?

解决\x转义十六进制字符串到Unicode字符的问题

直接用replace("\\x", "\u00")行不通是因为**\u在字符串字面量中必须跟完整的4位十六进制数**,\u00是不合法的写法,会触发语法错误。而且就算你构造出包含\u00XX的字符串,它也只是纯文本,不会自动解析成Unicode字符。下面给两种可靠的实现方式:

Python 实现

通过正则提取每个\x后的十六进制数,再转换为对应字符:

import re

input_str = "\\x52\\x50\\x1F\\x1F\\x44\\x46\\x57\\x47"
# 匹配所有\x开头的两位十六进制片段,捕获十六进制数字部分
hex_matches = re.findall(r'\\x([0-9A-Fa-f]{2})', input_str)
# 逐个将十六进制转成整数,再转为Unicode字符后拼接
result = ''.join([chr(int(hex_code, 16)) for hex_code in hex_matches])
print(result)  # 输出: RPDFWG

JavaScript 实现

利用replace的回调函数,动态转换每个匹配的十六进制片段:

const inputStr = "\\x52\\x50\\x1F\\x1F\\x44\\x46\\x57\\x47";
// 正则匹配\x后跟两位十六进制的模式
const hexRegex = /\\x([0-9A-Fa-f]{2})/g;
// 替换时将十六进制转成十进制,再生成对应字符
const result = inputStr.replace(hexRegex, (_, hexCode) => {
  return String.fromCharCode(parseInt(hexCode, 16));
});
console.log(result); // 输出: RPDFWG

补充:为什么替换成\u00XX后还需要额外处理?

如果你尝试先把\\x替换成\\u00,得到的是类似"\\u0052\\u0050..."的字符串——这只是包含转义序列的文本,不是实际的Unicode字符。如果想用这种方式,你需要额外解析这个字符串,比如在Python中用ast.literal_eval:

import ast

input_str = "\\x52\\x50\\x1F\\x1F\\x44\\x46\\x57\\x47"
temp_str = input_str.replace("\\x", "\\u00")
result = ast.literal_eval(f'"{temp_str}"')
print(result)  # 输出: RPDFWG

不过这种方法不如正则匹配可靠,因为如果输入中包含其他特殊转义字符,可能会解析出错。

内容的提问来源于stack exchange,提问作者Syndrite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:28