我需要一个工具,可以将 unicode 字符串转换为转义字符,如 \u0230。
例如,
echo ãçé | convert-unicode-tool
\u00e3\u00e7\u00e9
所有bash方法-
echo ãçé |
while read -n 1 u
do [[ -n "$u" ]] && printf '\\u%04x' "'$u"
done
前导撇号是 printf 格式/解释指南。
来自 GNU 在线手册页:
如果数字参数的前导字符是 '"' 或 ''',则其值是紧随其后的字符的数值。如果设置了 POSIXLY_CORRECT 环境变量,则任何剩余字符都将被忽略;否则,将打印警告例如,'printf "%d" "'a"' 在使用 ASCII 字符集的主机上输出 '97',因为 'a' 的 ASCII 值为 97。
这让我们可以将字符传递给 printf 进行数字解释,例如 %d 或 %03o,或者这里的 %04x。
[[ -n "$u" ]]
是因为有一个空尾随字节,否则将被附加为\u0000
。
输出:
$: echo ãçé |
> while read -n 1 u
> do [[ -n "$u" ]] && printf '\\u%04x' "'$u"
> done
\u00e3\u00e7\u00e9
没有空字节检查 -
$: echo ãçé | while read -n 1 u; do printf '\\u%04x' "'$u"; done
\u00e3\u00e7\u00e9\u0000
› echo -n ãçé | perl -C -e'print for map { sprintf "\\u%04x", ord } split //, readline'
\u00e3\u00e7\u00e9