获取字符串中的字符数?

时间:2014-02-15 12:22:36

标签: c++ utf-8 char

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

如果字符是ASCII,(字符数= =大小,以字节为单位)。

如果字符不是全部ASCII并且包含日语字母,则给定大小(以字节为单位),如何获取字符串中的字符数?

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

2 个答案:

答案 0 :(得分:5)

您可以使用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范围内的所有字节,   因为这些只是连续字节而不是它们的字符   拥有。然而,很少出现计算字符的需要   在应用程序中。

您可以在宽字符wchar_t

中保存unicode字符

答案 1 :(得分:4)

没有“角色”这样的东西。

或者更准确地说,“角色”取决于你问的对象。

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

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

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