【问题标题】:Get number of characters in string?获取字符串中的字符数?
【发布时间】:2014-02-15 12:22:35
【问题描述】:

我有一个应用程序,接受最多 255 个字符的 UTF-8 字符串。

如果字符是 ASCII,(字符数 == 字节大小)。

如果字符不是全 ASCII 并且包含日文字母,例如,给定字节大小,我如何获取字符串中的字符数?

输入:char *data, int bytes_no
输出:int char_no

【问题讨论】:

  • 您使用的是 C 还是 C++?我认为我们应该被告知
  • 您是在寻找可以自己实现的算法,还是正在使用库(在哪个操作系统上?)好吗?
  • @DavidKernin UTF-8 是一种变长编码,即可以是 8、16、24 位或更多位。
  • 你是对的,它是多字节的。对不起,我会删除错误的信息

标签: c++ utf-8 char


【解决方案1】:

您可以使用mblen来计算长度或使用mbstowcs

来源:

http://www.cplusplus.com/reference/cstdlib/mblen/

http://www.cl.cam.ac.uk/~mgk25/unicode.html#mod

可以使用 C 以可移植的方式计算字符数 mbstowcs(NULL,s,0)。这适用于 UTF-8,就像任何其他受支持的 编码,只要选择了适当的语言环境。一个 计算 UTF-8 中字符数的硬连线技术 string 将计算除 0x80 – 0xBF 范围内的所有字节之外的所有字节, 因为这些只是连续字节而不是它们的字符 自己的。然而,统计字符的需求却出人意料地很少出现 在应用程序中。

您可以将 unicode 字符保存为宽字符 wchar_t

【讨论】:

  • “应用程序中很少出现需要计算字符数的情况”——非常正确。
【解决方案2】:

没有“性格”这样的东西。

或者,更准确地说,“性格”是什么取决于你问谁。

如果您查看Unicode glossary,您会发现该术语有几个不完全兼容的含义。 作为具有语义价值的书面语言的最小组成部分(第一个含义),是单个字符。如果您采用 并在其中计算 Unicode 字符编码的基本编码单位(第三种含义),您可能会得到一个或两个,具体取决于确切的表示形式(规范化或非规范化)正在使用中。

也许不是。这是一个非常复杂的话题,没有人真正知道他们在说什么。

说实话,你可能需要计算码位,这与字符(意思是 3)基本相同。 mblen 是这样做的一种方法,前提是您当前的语言环境具有 UTF-8 编码。现代 C++ 提供了more C++-ish methods,但是,一些流行的实现不支持它们。 Boost 有something of its own 并且更便携。然后有专门的库,如 ICU,如果您的需求比计算字符复杂得多,您可能需要考虑这些库。

【讨论】:

  • 阅读 OP,我首先想到的是“最多 255 个字符的 UTF-8 字符串”的含义。那是 255 个字节,还是 Unicode 字符“?”的 255 倍(在 UTF-8 中:F0 9F 98 84)?
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
相关资源
最近更新 更多