В GtkTextBuffer,
я вижу, что GTK + хранит кириллические символы в двух байтах (что меня немного смущает, я думал, что они хранят их в кодировке UTF-8, следовательно, каждый символ должен быть в пределах одногобайт?)
Это приводит к проблеме - я сканирую текст в виде строки в цикле, и мне нужно сослаться на соответствующее расположение символов на основе индекса в цикле, однако они не имеютсоответствующие индексы больше, потому что текст содержит кириллицу.Количество символов составляет 8310, а размер строки составляет около 11300.
Если я использую g_str_to_ascii()
в строке, которую я сканирую, позже, когда я отображаю часть содержимого строки в деревевиджет просмотра отображает кириллические символы как ?
s.
Как обойти эту проблему?
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):