使用 perl 或 bash 将 Json 字符串文字转换为 utf8 字符

Convert Json string literals to utf8 characters with perl or bash

我有一个充满 \u 代码的文件,我想用相应的 utf8 字符替换它们,例如“\u00FC”将变成“ü”:

这是我的进展情况:

echo 'f\u00FCr' | perl -C -p -e "s/\\(u[0-9A-Fa-f]{4})/ chr(hex(sprintf('0x%s', '00FC'))) /ge"

这将输出预期的“für”。我只是想不通如何将捕获组的值用于 sprintf 函数? $1、$1、\1 和 \1 不工作。猜想这将是非常简单的事情,但不知道要搜索什么。 :-)

或者如果有更好的方法,也请告诉我!

</code> 是正确的,尽管您在捕获中错误地包含了 <code>u

但是对于shell,你必须小心转义。您显然正在使用 sh 或类似的(根据您需要转义 \),因此在使用 double-quotes 时必须转义某些字符。其中包括 $。在 perl 看到它之前,您的 shell 正在对 </code> 进行插值。最好使用 single-quotes.</p> <pre><code>perl -C -pe's/\u([0-9A-Fa-f]{4})/ chr(hex()) /ge'


请注意 sprintf('0x%s', '00FC') 等同于 '0x' . '00FC',但 hex 不需要前导 0x'00FC'(因此 )就足够了。