首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTK字符计数与字节索引

GTK字符计数与字节索引
EN

Stack Overflow用户
提问于 2019-07-03 20:05:15
回答 1查看 239关注 0票数 3

在GtkTextBuffer中,

我可以看到GTK+将西里尔字符存储在两个字节中(这让我有点困惑,我认为它存储了UTF-8编码的字符,因此每个字符都必须在一个字节内?)

这导致了一个问题--我在循环中将文本扫描为字符串,我需要根据循环中的索引引用适当的字符位置,但是它们已经没有相应的索引了,因为文本包含西里尔字母。字符数为8310,字符串大小约为11300。

如果我在正在扫描的字符串上使用g_str_to_ascii(),稍后当我在树视图小部件上显示字符串的某些内容时,它会将西里尔字符显示为?的。

我该如何解决这个问题?

代码语言:javascript
复制
G_MODULE_EXPORT void on_textbuffer_changed (GtkTextBuffer* textbuffer, gpointer user_data)
{
    GtkTextIter start   = {0};
    GtkTextIter end     = {0};
    gchar*      text    = NULL;

    gtk_text_buffer_get_bounds(textbuffer, &start, &end);

    text = gtk_text_buffer_get_text(textbuffer, &start, &end, FALSE);

    printf("[%i][%i]\n", gtk_text_buffer_get_char_count(textbuffer), strlen(text));

    g_free(text);
}

这将打印出[1][2],如果我放置西里尔字符和[2][4],如果我放置两个西里尔字符。

这些是西里尔字母"а“(char/dec)的字节:

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 20:38:50

还不完全清楚您想要做什么,但是如果您只需要一次处理整个UTF-8字符串,GLib Unicode操作函数可能会有所帮助,例如g_utf_next_char()和g_utf_get_char()。

这并不改变这样一个事实,即字符是Unicode,所以可能是多字节字符。

如果您的目标是能够基于例如匹配的单词修改缓冲区,那么您应该查看GtkTextIter API:例如,您可以使用搜索()获取直接在GtkTextBuffer API中使用的开始和结束项。这样,您就不需要处理实际的字符或字节索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56877221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档