Модератор: Модераторы разделов
kandrewo
Сообщения: 33
ОС: Gentoo 2007
Сообщение
kandrewo » 06.10.2007 22:23
Когда считываю из файла (латинка и кириллица вперемешку) инфу и запихиваю ее в textbuffer, ругаеться примерно так:
Код: Выделить всё
(Rycar_s:10228): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed
и не отображаеться ввесь текст. В каком-то месте (часто вначале) обрезается.
Считываю так:
Код: Выделить всё
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if ((fp=fopen(filename, "rb"))==NULL) {
g_print("Can't open file: %s\n", filename);
return;
}
textbuffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
if (!textbuffer) {
g_print("Buffer = NULL");
return;
}
gtk_text_buffer_get_end_iter(textbuffer, &end_iter);
while ((kilk=fread(buf, 1, 80, fp))>0) {
gtk_text_buffer_get_end_iter(textbuffer, &end_iter);
gtk_text_buffer_insert(textbuffer, &end_iter, buf, kilk);
}
Кто-то сталкивался с подобным?
kandrewo
Сообщения: 33
ОС: Gentoo 2007
Сообщение
kandrewo » 06.10.2007 22:40
А может быть, что я "разрываю" юникод-символ? Латинка то занимает 1 байт. А кириллица 2. Проверял.
sergeyvp
Сообщения: 807
ОС: ubuntu
Сообщение
sergeyvp » 06.10.2007 22:54
kandrewo писал(а): ↑ 06.10.2007 22:40
А может быть, что я "разрываю" юникод-символ? Латинка то занимает 1 байт. А кириллица 2. Проверял.
Я с кодировками мало работал, у меня в основном всё в UTF8, но для работы с файлами лучше использовать
http://linfoline.homedns.org/API/glib/glib...-Utilities.html
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5
Сообщение
sergio » 06.10.2007 23:06
kandrewo писал(а): ↑ 06.10.2007 22:40
А может быть, что я "разрываю" юникод-символ? Латинка то занимает 1 байт. А кириллица 2. Проверял.
Может. Вы забыли указать, в какой кодировке файл вы читаете. Если UTF-8, то может. И если операция _insert предполагает, что добавляемый кусок текста будет валидным (а скорее всего это так (?)), то соответственно будут проблемы. Для подобной загрузки текста из файла должны существовать utf8-aware функции, которые понимают, что они читают, где у буквы начало, где конец...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
kandrewo
Сообщения: 33
ОС: Gentoo 2007
Сообщение
kandrewo » 07.10.2007 00:04
Проблемка решилась так:
Код: Выделить всё
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
gchar *filename;
char * buf;
GtkTextIter end_iter;
GtkTextBuffer *textbuffer=NULL;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if (!g_file_get_contents(filename, &buf, NULL, NULL)) {
g_print("Can't open file: %s\n", filename);
return;
}
textbuffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
if (!textbuffer) {
g_print("Buffer = NULL");
return;
}
MenuItemNewClick(NULL, NULL);
gtk_text_buffer_get_end_iter(textbuffer, &end_iter);
gtk_text_buffer_insert(textbuffer, &end_iter, buf, strlen(buf));
g_free (filename);
g_free (buf);
}