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

如何在bash中将unicode字符串转换为转义?,bash,shell,unicode,character-encoding,Bash,Shell,Unicode,Character Encoding,我需要一个将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格式/解释指南 发件人: 如果数值参数的前导字符为'''或'',则其值为紧跟其后的

我需要一个将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格式/解释指南

发件人:

如果数值参数的前导字符为'''或'',则其值为紧跟其后的字符的数值。如果设置了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
全bash方法-

echo ãçé |
   while read -n 1 u
   do [[ -n "$u" ]] && printf '\\u%04x' "'$u"
   done
前面的撇号是printf格式/解释指南

发件人:

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

StackOverflow不是“请给我写一个脚本”服务。到目前为止您尝试了什么?转换取决于输入编码(由命令
locale
列出)。这里给出的答案忽略了这个问题。存在for(由于问题已关闭,无法在此回答)。StackOverflow不是“请为我编写脚本”服务。到目前为止您尝试了什么?转换取决于输入编码(由命令
locale
列出)。这里给出的答案忽略了这个问题。有一个for(由于问题已结束,无法在此回答)。为什么要使用for的
?没有任何问题也行<代码>$:echo-nãç|perl-C-e'print map{sprintf“\\u%04x”,ord}split//,readline'
\u00e3\u00e7\u00e9,因为我把它和在输出中穿插空格的
print“listexpr in babycart”
(实际上与
print“@arrayvar”
)混淆了
for
iteration可以防止这种情况发生。在这里没有造成任何伤害。:)为什么要为设置
?没有任何问题也行<代码>$:echo-nãç|perl-C-e'print map{sprintf“\\u%04x”,ord}split//,readline'
\u00e3\u00e7\u00e9,因为我把它和在输出中穿插空格的
print“listexpr in babycart”
(实际上与
print“@arrayvar”
)混淆了
for
iteration可以防止这种情况发生。在这里没有造成任何伤害。:)注意:
-n
尊重(并忽略)空格、制表符和换行符等有效分隔符。如果您想让它也拾取这些,请使用
-N
。谢谢。为了避免空格出现问题,我使用以下方法:for((I=0;I<${string};I++);do c=“${string:1}”;printf'\\u%04x'$c';完成;注意:
-n
尊重(并忽略)空格、制表符和换行符等有效分隔符,而不是read-n。如果您想让它也拾取这些,请使用
-N
。谢谢。为了避免空格出现问题,我使用以下方法:for((I=0;I<${string};I++);do c=“${string:1}”;printf'\\u%04x'$c';完成;而不是读n?