如何通过命令行实现UTF-8编码值与Unicode码点的互转?
如何通过命令行实现UTF-8编码值与Unicode码点的互转?
嘿,刚好碰到过类似的需求,给你分享几个实用的命令行方法,分两种情况来解决你的问题:
1. 将UTF-8十六进制值转成Unicode码点
不管你的输入是连续的十六进制字符串(比如e28ca5)还是带空格分隔的(比如e2 8c a5),都可以用下面的方法处理:
处理带空格的输入
先把空格去掉,再转成原始字节,最后提取Unicode码点:
echo -n "e2 8c a5" | tr -d ' ' | xxd -r -p | python3 -c "import sys; print('%04x' % ord(sys.stdin.read()))"
tr -d ' ':去掉输入里的空格,把e2 8c a5变成e28ca5xxd -r -p:把十六进制字符串还原成对应的UTF-8字节- 后面的Python代码:读取字节转成字符,再获取它的Unicode码点,以4位十六进制格式输出,结果就是
2325
处理无空格的输入
如果输入本来就是连续的十六进制,直接跳过去空格的步骤即可:
echo -n "e28ca5" | xxd -r -p | python3 -c "import sys; print('%04x' % ord(sys.stdin.read()))"
2. 将Unicode码点转成UTF-8十六进制值
反过来,把Unicode码点(比如2325)转成UTF-8的十六进制,也有两种输出格式可选:
输出连续的十六进制字符串
printf '\u2325' | xxd -p
printf '\u2325':根据Unicode码点输出对应的UTF-8字符xxd -p:把字符的字节转换成连续的十六进制字符串,结果就是e28ca5
输出带空格分隔的十六进制
如果需要和od输出格式一致的空格分隔形式,可以用sed处理:
printf '\u2325' | xxd -p | sed 's/\(..\)/\1 /g; s/ $//'
sed命令的作用是每两个字符后加一个空格,最后去掉末尾多余的空格,输出结果就是e2 8c a5
备注:内容来源于stack exchange,提问作者Ray Butterworth
相关产品推荐
相关产品推荐

