如何使用Busybox 1.19.4将含十六进制UTF编码的字符串转成字符?
如何用Busybox 1.19.4转码十六进制编码的非ASCII文件路径
你需要将包含\xXXX格式十六进制编码非ASCII字符的文件路径(比如/media/\x444\x430\x439\x43b.txt)转换为正常Unicode路径(/media/файл.txt),以下是两种基于Busybox 1.19.4的实现方案:
方案1:sed + printf
Busybox自带的sed可以匹配并替换十六进制转义序列,再通过printf解析为对应Unicode字符:
echo '/media/\x444\x430\x439\x43b.txt' | sed 's/\\x\([0-9a-fA-F]\{3\}\)/\\u0\1/g' | xargs printf
说明:
sed命令将每个\xXXX替换为\u0XXX(补前导0适配printf的\u四位十六进制格式要求)printf会把\u0XXX转义序列解析为对应的Unicode字符
方案2:Busybox awk
如果更倾向于脚本化处理,可用Busybox的awk实现:
echo '/media/\x444\x430\x439\x43b.txt' | awk '{ while (match($0, /\\x[0-9a-fA-F]{3}/)) { hex = substr($0, RSTART + 2, 3) char = sprintf("%c", strtonum("0x" hex)) $0 = substr($0, 1, RSTART - 1) char substr($0, RSTART + 5) } print }'
说明:
- 循环匹配所有
\xXXX格式的子串 - 提取十六进制部分并转换为十进制码点,再通过
sprintf转为对应字符 - 逐步替换原字符串中的转义序列,最后输出处理后的路径
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

