Character encoding 多少位代表一个字符,多少位代表ASCII中的一个字节?

Character encoding 多少位代表一个字符,多少位代表ASCII中的一个字节?,character-encoding,encode,Character Encoding,Encode,我知道这很简单,但我还是不知道。有些人说3是代表一个字符的7位,而有些人说8位。谁能告诉我哪一个是对的?如果是8位/字符,那么有多少位代表一个字节?如果是7,那么有多少位代表一个字符,有多少位代表一个字节 US-ASCII实际上是每个字符7位。最高代码的值为127,表示DEL控制字符。任何具有较高值代码的字符集都不是US-ASCII(但可能是其扩展,如Unicode) 大多数微处理器使用8位字节(=最小的可寻址存储单元)。如果要在这些微处理器上使用US-ASCII,有两个选项: 使用7个字节(

我知道这很简单,但我还是不知道。有些人说3是代表一个字符的7位,而有些人说8位。谁能告诉我哪一个是对的?如果是8位/字符,那么有多少位代表一个字节?如果是7,那么有多少位代表一个字符,有多少位代表一个字节

US-ASCII实际上是每个字符7位。最高代码的值为127,表示
DEL
控制字符。任何具有较高值代码的字符集都不是US-ASCII(但可能是其扩展,如Unicode)

大多数微处理器使用8位字节(=最小的可寻址存储单元)。如果要在这些微处理器上使用US-ASCII,有两个选项:

  • 使用7个字节(每个字节8位)存储8个字符(每个字节7位),即使这会使程序非常复杂
  • 使用1字节(8位)存储1个字符(7位),即使这样会浪费空间

在这种情况下,对简单程序的需求超过了对高效内存使用的需求。这就是为什么通常使用一个8位单位(简称八位字节)来存储字符,即使每个字符仅以7位单位编码。您只需将额外位设置为零(或者,在某些情况下,使用额外位进行错误检测)。

我知道这是一个老问题,但为了将来的读者;您可以通过以下(C#.NET)确定给定字符串(或字符串值)中的字节数:

在尝试计数字节数时,请记住使用正确的编码,因为每种编码的字节数不同:

  • 8位ASCII编码中的ASCII字符是8位(1字节),尽管它可以容纳7位
  • ISO-8859-1编码中的ISO-8895-1字符为8位(1字节)
  • UTF-8编码中的Unicode字符介于8位(1字节)和32位(4字节)之间
  • UTF-16编码中的Unicode字符介于16位(2字节)和32位(4字节)之间,尽管大多数常用字符采用16位。这是Windows内部使用的编码
  • UTF-32编码中的Unicode字符始终为32位(4字节)
  • UTF-8中的ASCII字符为8位(1字节),UTF-16中的ASCII字符为16位
  • ISO-8895-1(0xA0-0xFF)中的附加(非ASCII)字符将在UTF-8和UTF-16中占用16位
Encoding.ASCII.GetByteCount("SomeString");