一个字节和一个字符(至少是*尼克斯)有什么区别?

2021-02-24 17:16

我知道任何字符都是由一个或多个byte/s组成的。如果我没有弄错的话,至少在*nix操作系统中,一个字符通常(或完全?)会只由一个字节组成。字节和字符之间有什么

解答动态

  • A字节定义为8位。位是一个二进制数字(即基本的1或0,是所有数字计算的基础),
    A字符通常是一个字节,在某些上下文中(例如ASCII)可以定义为一个字节的长度。但是,Unicode、UTF-8和UTF-16定义了扩展字符集,其中单个字符(或glyph)可以由长度超过一个字节的数据有效负载定义字符:
    Q???????????????????
    是单个字符,但它是用Unicode编码的,通过对基本标志符号(简单的Q)应用多个重音符号(或变音符号)来实现的。这种编码的长度比一个字节长得多:只将该字符放入一个文件中,并在我的语言环境中用hexdump而不是cat来显示内容产量:
    $hexdump-C demo00000000 51立方厘米b4立方厘米91立方厘米8d立方厘米89立方厘米86立方厘米89 cd 9d cd

    • Q……………..000000 10 9b cc 91 cc 95 cc 82 cc aa cc 98 cc b3 cc a3 cc

      • ………..000000 20 a2 cc 9e cc a9 cc aa 0a

        • ………..000000 28

          • 重点强调我的:
            3.87 CharacterA表示单个图形符号或控制代码的一个或多个字节的序列。实际上,确切的含义取决于实际的语言环境,例如在“C”语言环境下,printf'\xc3\xa4\xc3\xb6'

            • wc-m给出4,因为它有效地计算字节;而在UTF-8语言环境下给出2,因为这是两个UTF-8编码字符??。假设您的终端也被设置为UTF-8,那么您当然可以只编写printf'??'。
              (注意wc-c被定义为计数字节,而不是字符,这已经足够令人困惑了。)
              更糟的是,字符支持也取决于实用程序,并且不是所有的程序都能干净地处理多字节字符(更不用说Unicode的所有怪癖了)。E、 gnutr处理字节,不管它的手册页是什么说明:
              $printf

              • tr

                • xy;echox$printf?tr

                  • xy;echox

                    • 第一个字节与tr'\303\244''xy'相同,因此?的两个字节都被替换,而第二个字节的发生是因为?和?的第一个字节相同。当然,如果它真的处理字符,那么应该打印x和?.

                      • End

                      免责声明:

                      本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。