ASCII 字符范围是从 0 到 127,在该范围内,awk 的带有 %c 格式说明符的 printf 输出一个字节的数据:
$ awk 'BEGIN{printf "%c", 97}'
a
$ awk 'BEGIN{printf "%c", 127}' | xxd
00000000: 7f
$ awk 'BEGIN{printf "%c", 127}' | xxd -b
00000000: 01111111
Run Code Online (Sandbox Code Playgroud)
但对于大于 127 的值,它将打印出多个字节:
$ awk 'BEGIN{printf "%c", 128}' | xxd
00000000: c280
$ awk 'BEGIN{printf "%c", 128}' | xxd -b
00000000: 11000010 10000000
Run Code Online (Sandbox Code Playgroud)
0xc280 的意义是什么?为什么 awk 输出该字符而不是 0x80?
这是UTF-8编码。11000010 开始一个双字节序列(前两位设置后跟一个清零位),有效位为 00010000000(第一个字节的最后五位,第二个字节的最后六位),即 128 。
AWK 输出此内容是因为您的语言环境设置为使用 UTF-8;您可以切换到非 UTF-8 语言环境来查看差异:
$ LC_ALL=C awk 'BEGIN{printf "%c", 128}' | xxd -b
00000000: 10000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |