AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 459778
Accepted
x-yuri
x-yuri
Asked: 2018-08-01 23:14:42 +0800 CST2018-08-01 23:14:42 +0800 CST 2018-08-01 23:14:42 +0800 CST

od 如何处理`\x7f` 之后的符号?

  • 772

以下命令从to传递给od符号:\x00\xff

$ seq 0 255 | awk '{printf("%c", $0)}' | od -c

但我得到的是:

0000000  \0 001 002 003 004 005 006  \a  \b  \t  \n  \v  \f  \r 016 017
0000020 020 021 022 023 024 025 026 027 030 031 032 033 034 035 036 037
0000040       !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
0000060   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
0000100   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
0000120   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
0000140   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
0000160   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ 177
0000200 302 200 302 201 302 202 302 203 302 204 302 205 302 206 302 207
0000220 302 210 302 211 302 212 302 213 302 214 302 215 302 216 302 217
0000240 302 220 302 221 302 222 302 223 302 224 302 225 302 226 302 227
0000260 302 230 302 231 302 232 302 233 302 234 302 235 302 236 302 237
0000300 302 240 302 241 302 242 302 243 302 244 302 245 302 246 302 247
0000320 302 250 302 251 302 252 302 253 302 254 302 255 302 256 302 257
0000340 302 260 302 261 302 262 302 263 302 264 302 265 302 266 302 267
0000360 302 270 302 271 302 272 302 273 302 274 302 275 302 276 302 277
0000400 303 200 303 201 303 202 303 203 303 204 303 205 303 206 303 207
0000420 303 210 303 211 303 212 303 213 303 214 303 215 303 216 303 217
0000440 303 220 303 221 303 222 303 223 303 224 303 225 303 226 303 227
0000460 303 230 303 231 303 232 303 233 303 234 303 235 303 236 303 237
0000500 303 240 303 241 303 242 303 243 303 244 303 245 303 246 303 247
0000520 303 250 303 251 303 252 303 253 303 254 303 255 303 256 303 257
0000540 303 260 303 261 303 262 303 263 303 264 303 265 303 266 303 267
0000560 303 270 303 271 303 272 303 273 303 274 303 275 303 276 303 277
0000600

后面的字符有什么问题\x7f?

od
  • 1 1 个回答
  • 619 Views

1 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2018-08-02T01:45:52+08:002018-08-02T01:45:52+08:00

    根据awk实现,printf("%c", n)输出字节值n,或代码点为 的字符n。

    如果语言环境的字符集是 UTF-8(参见 的输出locale charmap),则对于 0 到 127 的值(其中字符 U+0000 到 U+007f 的编码是字节值 0 到 0x7f)产生相同的结果。

    但是对于超过 127 的任何内容,您将获得第一类实现的相应字节值(截断为 8 位)awk,或者其他类别的实现的 UTF-8 编码(至少 GNU awk,可能是您正在使用的那个)。

    gawk 'BEGIN{printf "%c", 8364}'
    

    (8364 是 0x20AC) 打印一个€欧元符号 (U+20AC),在 UTF-8 中编码为 0xe2 0x82 0xac,而

    mawk 'BEGIN{printf "%c", 8364}'
    

    打印一个 0xAC 字节(这是 UTF-8 中没有字符的编码,这是无效的文本,您的终端可能会将其呈现为�替换字符)。

    请注意,这里的代码点通常是多字节字符集的 Unicode 代码点,以及单字节字符集的字符集值(即字节值)。在使用 iso8859-15 字符集的语言环境中,欧元符号的代码点为 0xA4(不是 0x20AC),printf("%c", 0xA4)无论实现如何,都会打印一个欧元符号(字节值 0xA4)awk。

    因此,如果您想按值打印字节(值从 1 到 255,并非所有awk实现都适用于 0),请使用:

    LC_ALL=C awk 'BEGIN{printf "%c", value}'
    

    C 语言环境的字符集保证为单字节,并且每个系统都有一个 C 语言环境。

    您还可以使用:

    printf '\200'
    

    (这里字节值用八进制表示)。一些printf实现还支持十六进制:

    printf '\x80'
    

    一些printf实现还支持:

    printf '\u20ac'
    

    根据其 Unicode 代码点打印字符(通常在语言环境的字符集中(因此 iso8859-15 语言环境中的 0xA4,UTF-8 语言环境中的 0xe2 0x82 0xac,以及字符集没有欧元符号的语言环境中的各种不同行为) ),尽管有些像printf内置的ksh93输出,它以 UTF-8 编码,而与语言环境的字符集无关)。

    • 2

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve