我有一个包含 unicode 转义符 (\u0123) 的 Java 属性文件,我需要将其转换为新的 Java 9 UTF-8 格式。我尝试了 iconv 和 uconv(来自 ICU)的多种选项,但无法获得良好的结果。询问聊天 GPT 也没有产生完全有效的解决方案。
cat messages.properties | awk -v RS='\\\\u[0-9a-fA-F]{4}' '{ORS=""; print $0; printf "%c",strtonum("0x"substr(RT,3)) } END {print ""}'
RS='\\\u[0-9a-fA-F]{4}'
将记录分隔符设置为具有匹配 unicode 转义的正则表达式
ORS=""
确保打印 $0 时记录分隔符不会被任何内容替换
print $0
打印记录分隔符之前的字符串
printf "%c",strtonum("0x"substr(RT,3))
首先从 \u0123 (substr 部分)中提取十六进制值,然后在 strtonum 前面添加 '0x' 将其解释为十六进制,将其转换为数字 (strtonum) 并将其打印为字符代码 (printf "%c ”)。
END {print ""}
是无操作,但需要关闭前一个 {} 块