使用 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'
(因此
)就足够了。
我有一个充满 \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'
(因此 )就足够了。