一个字节和一个字符(至少是*尼克斯)有什么区别?
我知道任何字符都是由一个或多个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 cdQ……………..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处理字节,不管它的手册页是什么说明:
$printftr
xy;echox$printf?tr
xy;echox
第一个字节与tr'\303\244''xy'相同,因此?的两个字节都被替换,而第二个字节的发生是因为?和?的第一个字节相同。当然,如果它真的处理字符,那么应该打印x和?.
- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。