【问题标题】:How do I find out how many bytes a character has?如何找出一个字符有多少字节?
【发布时间】:2011-08-30 12:15:37
【问题描述】:

我想知道如何找出一个字符有多少字节?

【问题讨论】:

  • 什么编程语言?还是您只是想自己在互联网上查找?另外,哪种编码? UTF-8?
  • PHP 是我使用 UTF-8 编码的语言,但其余的呢?
  • 这实际上是一个棘手的问题。例如,UTF-8 可能有 1 到 4 个字节。
  • 我怎么知道某个字母或数字或任何有 1 字节或 4 字节的东西?
  • 马里奥刚刚发布了正确答案。比我用 ord() 制作的要好。

标签: php byte character


【解决方案1】:

如果你想知道 PHP 字符串中的一个字母有多少个 UTF-8 字节,那么:

print strlen(mb_substr($string, 0, 1, "utf-8"));

strlen() 返回原始字节长度,而mb_substr() 根据字符集/编码返回一个“字符”。在此示例中,位置为0

【讨论】:

  • 请注意,您可能必须禁用mbstring.func_overload,否则strlen 只是mb_strlen 使用内部字符编码。 mb_strlen($string,'ASCII'); 可能更便携。
【解决方案2】:
  • ASCII 是 7 位。
  • 大多数其他语言使用 8 位(1 个字节)。
  • 许多东方语言(中文、日文)使用 16 位(2 个字节)。
  • Unicode 通常是 32 位(4 字节)。

字符的存储和表示方式取决于您使用的编程语言和平台。

【讨论】:

  • 有没有一个表格可以告诉我一个字母有多少字节?
  • @SyFY - 有表格,具体取决于平台和编程语言。我不知道 PHP 内部使用什么。
  • unicode 码点是 32 位,而不是 16 位。(UTF-16 可以将单个码点编码为两个 16 位码单元)
  • @Oded @Mat Current Unicode standards 仅指定了 20 位的空间(略超过一百万个代码点),尽管我认为某些 historic 版本可能允许更多的代码点(原始的 unicode 只有 16 位)。许多可以存储在单个 UTF-32“4 字节”中的 无效 Unicode 代码点,因为该空间仅为 0-0x10FFFF 定义(这可能看起来像限制,但它涵盖了“可预见的使用”,并允许 UTF-8 和 UTF-16 具有一些更好的属性。Unicode 不会尝试成为二进制传输机制。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
相关资源
最近更新 更多