【问题标题】:How many bits or bytes are there in a character? [closed]一个字符中有多少位或字节? [关闭]
【发布时间】:2011-01-31 11:17:13
【问题描述】:

每个“字符”有多少位或字节?

【问题讨论】:

  • 您的问题和标题要求不同的东西。反正我没听懂你,你能再解释一下吗?
  • 是的,我也不确定。但字节更符合他的标题。一位字符的数量没有什么意义,但一个字符有多少位更有意义。如上所述,它需要上下文。
  • @Skurmedel:你怎么看?标题也说“位”。
  • @Cody Gray:看看我编辑的答案。他的标签上写着字节,所以我认为这是一个错字。不过我可能错了。
  • @Skurmedel:我不明白......你还没有发布这个问题的答案。是的,我之前没有注意到这个标签。但我仍然倾向于认为 2/3 比 1/3 更好。

标签: character-encoding byte


【解决方案1】:

这取决于字符是什么以及它是什么编码:

  • 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 中是 16 位。

  • ISO-8895-1 (0xA0-0xFF) 中的附加(非 ASCII)字符在 UTF-8 和 UTF-16 中将占用 16 位。

这意味着有 0.03125 到 0.125 个字符。

【讨论】:

  • 这个答案在处理套接字、编码、文本等方面很有帮助。
【解决方案2】:

一个字节有 8 位(通常在 Windows 中)。

但是,如果您正在处理字符,它将取决于字符集/编码。 Unicode 字符可以是 2 或 4 个字节,因此是 16 或 32 位,而 Windows-1252 有时被错误地称为 ANSI 只有 1 个字节,因此是 8 位。

在亚洲版本的 Windows 和其他一些版本中,整个系统以双字节运行,因此一个字符是 16 位。

已编辑

根据 Matteo 的评论,所有当代版本的 Windows 在内部每个字符都使用 16 位。

【讨论】:

  • 一些遗留应用程序仍然使用 1 字节字符和本地代码页,但所有 NT 版本的 Windows 内部都使用 2 字节字符运行(UCS-2 到 NT4,从 Windows 2000 开始的 UTF-16,存储如wchar_t),不仅是亚洲的,所有较新的应用程序也应该这样做。 (相反,在 Linux 上,情况完全不同,因为通常整个系统都使用 UTF-8)
  • @Matteo:请注意,在 Windows 中,双字节不一定与 Unicode 相同。 Reference
  • @Cody Gray:是的,通常当您阅读“双字节”编码时,它是传统的亚洲内容,它们存储为多个 char,而 Unicode 字符串使用 wchar_t 类型存储.顺便说一句,当 NT 启动时,wchar_t 足以避免代理对,但现在它是 UTF-16,即使wchar_t 字符串也可以有可变长度字符,所以在 Windows 上,Unicode 字符可以从 2 到4 个字节(1 或 2 个wchar_t)。
  • @Matteo:是的,我同意你的看法。我想在你编辑你的第一条评论之前,我看到了一些不同的建议,那就是我写我的评论的时候。现在所有版本的 Windows 都在内部使用 UTF-16 Unicode 字符串。
  • @Cody Gray:我倾向于编辑我的 cmets 有点过多,这会导致混乱:)
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2012-03-12
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2021-05-15
相关资源
最近更新 更多