如何在 bash 中将 unicode 字符串转换为转义符? [已关闭]

问题描述 投票:0回答:2

我需要一个工具,可以将 unicode 字符串转换为转义字符,如 \u0230。

例如,

echo ãçé | convert-unicode-tool
\u00e3\u00e7\u00e9
bash shell unicode character-encoding
2个回答
4
投票

所有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

0
投票
› echo -n ãçé | perl -C -e'print for map { sprintf "\\u%04x", ord } split //, readline'
\u00e3\u00e7\u00e9
© www.soinside.com 2019 - 2024. All rights reserved.