计算 utf-8 编码的字串逻辑长度
采用 utf-8 编码,每个汉字表示 3 个字节,而每个英文字母表示 1 个字节,这样一来就为判定中英文混合字串的逻辑长度带来了困难。本来是想自己写一个 C 函数来解决这个问题,但是搜了搜 Gtk+ 的文档,发现 glib 提供了一些 utf-8 字串操作函数,其中 g_utf8_strlen () 函数可计算 utf-8 编码的字串的逻辑长度。
g_utf8_strlen () 声明如下:
glong g_utf8_strlen (const gchar *p, gssize max);
参数 p 为字串指针;参数 max 表示 p 所指字串的终止符位置,用于截断 p 所指字串,若该值为 -1,则认为 p 所指字串无终止符,可获取整个字串的逻辑长度。
下面是一个很小的示例:
#include <glib.h>
int
main (void)
{
char * s = "我是中国人,I am a Chinese.";
glong b = g_utf8_strlen (s, -1);
g_print ("%d\n", b);
return 0;
}
int
main (void)
{
char * s = "我是中国人,I am a Chinese.";
glong b = g_utf8_strlen (s, -1);
g_print ("%d\n", b);
return 0;
}
编译该程序:
$ gcc -o test `pkg-config --cflags --libs glib-2.0` test.c -std=c99
程序输出结果:
$ ./test
21
21
2008年11月01日 01:55
似乎每个中文字体的逻辑长度是1个字节阿
2008年11月01日 06:53
嗯,这个问题,你可以参考一下 utf-8 的一些资料。1 个字节肯定没法表示中文字符,因为它最多只能表示 256 个字符。