我有一个应用程序,接受最多255个字符的UTF-8字符串。
如果字符是ASCII,(字符数= =大小,以字节为单位)。
如果字符不是全部ASCII并且包含日语字母,则给定大小(以字节为单位),如何获取字符串中的字符数?
输入:char *data, int bytes_no
输出:int char_no
答案 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
答案 1 :(得分:4)
没有“角色”这样的东西。
或者更准确地说,“角色”取决于你问的对象。
如果查看Unicode glossary,您会发现该术语有几个不完全兼容的含义。作为具有语义值(第一个含义)的书面语言的最小组成部分,á
是单个字符。如果您在其中使用á
并计算编码的基本单位编码(第三个含义),则可能会得到一个或两个,具体取决于具体的表示形式(标准化或正常化)正在使用。
或许不是。这是一个非常复杂的主题,没有人真正知道他们在说什么。
走向世界,您可能需要计算代码点,这与字符(意思是3)基本相同。 mblen
是一种方法,只要您当前的语言环境具有UTF-8编码。 Modern C ++提供more C++-ish methods,但是,在某些流行的实现中不支持它们。 Boost有something of its own并且更便携。然后有专门的库,如ICU,如果您的需求比计算字符要复杂得多,您可能需要考虑这些库。