我想输入一个字符串并输出其unicode字符串,例如“ \ uXXXX \ uXXXX”。
现在我已经尝试了两种方法,但是它们都输出utf-8。我该怎么办?
printf "文" | hexdump -e '"%X"'
# 8796E6
printf "文" | xxd -pu
# e69687
答案 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'