gpt4 book ai didi

bash - 使用 hexdump 或 xxd 等 shell 实用程序打印十六进制 Unicode 代码点

转载 作者:行者123 更新时间:2023-11-29 09:10:23 24 4
gpt4 key购买 nike

Bash 4.2 和 zsh 支持 echo $'\u30a2',但是是否有使用通用 shell 实用程序的替代方案?

$ ruby -e 'puts ARGV[0].chars.map{|c|c.ord.to_s(16)}.join(" ")' aäア𝐀
61 e4 30a2 1d400

这不适用于 U+10000 或其上方的字符:

$ printf %s aäア𝐀 | iconv -f $(locale charmap) -t UTF-16BE | xxd -p
006100e430a2d835dc00

最佳答案

我在 https://raw.github.com/lhunath/scripts/master/bash/bashlib/bashlib 中找到了这个函数:

hex() { 
printf '%x' "'$1"
}

更多例子:

$ printf %x\\n \'ア
7fc2
$ LC_CTYPE=C printf %x\\n \'ア
e3
$ printf %s $' \n\n\\'|while IFS= read -r -d '' -n1 c;do printf %x\\n "'$c";done
20
20
a
a
5c
$ printf %s aäア𝐀|while IFS= read -r -d '' -n1 c;do printf '%s %x\n' "$c" "'$c";done
a 61
ä e4
ア 30a2
𝐀 1d400

这适用于 bash 4.2 和 zsh 4.3.11 中的内置 printf 但不适用于 bash 3.2 中的内置 printf 或 OS X 的 /usr/bin/printf.

-n1 一次读取一个字符,-d '' 将分隔符从 \n 更改为 \0 ,因此 read 还包括换行符(但不包括 NUL 字符)。 POSIX 指定的read 的唯一选项是-r

关于bash - 使用 hexdump 或 xxd 等 shell 实用程序打印十六进制 Unicode 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15409595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com