计算 utf-8 编码的字串逻辑长度

LiYanrui posted @ Apr 26, 2008 04:16:59 PM in 程序设计 with tags glib utf-8 , 7890 阅读

采用 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;
}

编译该程序:

$ gcc    -o    test    `pkg-config --cflags --libs glib-2.0`    test.c    -std=c99

程序输出结果:

$ ./test
21
mycodenum 说:
2008年11月01日 01:55

似乎每个中文字体的逻辑长度是1个字节阿

Avatar_small
LiYanrui 说:
2008年11月01日 06:53

嗯,这个问题,你可以参考一下 utf-8 的一些资料。1 个字节肯定没法表示中文字符,因为它最多只能表示 256 个字符。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter