如何将Unicode字符串转换为Unicode转义序列?

时间:2020-05-14 07:04:27

标签: bash

我想输入一个字符串并输出其unicode字符串,例如“ \ uXXXX \ uXXXX”。

现在我已经尝试了两种方法,但是它们都输出utf-8。我该怎么办?

printf "文" | hexdump -e '"%X"'
# 8796E6
printf "文" | xxd -pu
# e69687

1 个答案:

答案 0 :(得分:2)

\uXXXX形式的文字对应于UTF-16编码。因此,您必须先将字符串转换为该编码,然后再进行十六进制转储。

转换为UTF-16后,您可以按4个字节的组进行十六进制转储,并使用sed对转储进行后处理,以插入前导\u。在这里,我们使用od代替xdd,因为od通常是预先安装的。注意字节顺序/字节顺序的问题。

printf '文' | iconv -t UTF16LE | od -t x2 -An -v | sed 's/ /\\u/g'

或更长时间,但hacky和平台独立性较低(od默认为系统的字节序)

printf '文' | iconv -t UTF16BE | od -t x2 -An -v --endian=big | sed 's/ /\\u/g'