一个字符有多少位或字节?[关闭]


94

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


1
您的问题和标题要求不同的内容。无论如何,我听不懂,您能进一步解释吗?
galymzhan 2011年

是的,我也不确定。但是字节与他的头衔更加一致。一位中的字符数量意义不大,但一个字符中的多少位意义更大。如上所述,它需要上下文。
Skurmedel

4
@Skurmedel:你如何看待?标题说“位”也。
科迪·格雷

@库迪·格雷:看看我编辑的答案。他的标签说的是字节,所以我认为这是一个错字。我可能是错的。
Skurmedel

@Skurmedel:我不明白...您尚未发布问题的答案。是的,我之前没有注意到这个标签。但是我仍然倾向于认为2/3比1/3更好。
科迪·格雷

Answers:


195

它取决于什么是字符以及它的编码形式:

  • 尽管可以容纳7位,但采用8位ASCII编码的ASCII字符为8位(1字节)。

  • 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位。

那将意味着一点在0.03125到0.125个字符之间。


当处理套接字,编码,文本等时,此答案很有帮助。
马里奥Meyrelles

17

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

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

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

已编辑

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


一些旧版应用程序仍使用1字节字符和本地代码页,但是Windows的所有NT版本在内部都以2字节字符运行(UCS-2至NT4,从Windows 2000开始为UTF-16,存储为wchar_t),不仅是亚洲字符,因此应该执行所有较新的应用程序。(相反,在Linux上,这是一个完全不同的故事,因为通常在整个系统中都使用UTF-8)
Matteo Italia

@Matteo:请注意,在Windows中,双字节不一定与Unicode相同。参考
Cody Gray

@Cody Gray:是的,通常当您阅读“双字节”编码时,它是传统的亚洲内容,它们存储为多个char,而Unicode字符串使用该wchar_t类型存储。顺便说一下,启动NT时wchar_t足以避免代理对,但是现在它是UTF-16,即使wchar_t字符串也可以具有可变长度的字符,所以在Windows上,Unicode字符可以占用2到4个字节(1或2个字节)。wchar_t)。
Matteo Italia

@Matteo:是的,我同意你的观点。我认为在您编辑第一个评论之前,我看到的建议有所不同,那是我写我的评论的时间。现在,内部所有版本的Windows都使用UTF-16 Unicode字符串。
科迪·格雷

@Cody Gray:我倾向于对我的评论进行过多编辑,这会导致混乱:)
Matteo Italia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.