如何将unicode字符串转换为bash中的转义符?

时间:2018-07-12 13:44:54

标签: bash shell unicode character-encoding

我需要一个将Unicode字符串转换为转义字符(如\ u0230)的工具。

例如

echo ãçé | convert-unicode-tool
\u00e3\u00e7\u00e9

2 个答案:

答案 0 :(得分:0)

› echo -n ãçé | perl -C -e'print for map { sprintf "\\u%04x", ord } split //, readline'
\u00e3\u00e7\u00e9

答案 1 :(得分:0)

所有bash方法-

echo ãçé |
   while read -n 1 u
   do [[ -n "$u" ]] && printf '\\u%04x' "'$u"
   done

前导撇号是printf格式/解释指南。

来自the GNU man page online

  

如果数字参数的前导字符是'“'或''',则其值是紧随其后的字符的数字值。如果设置了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