[Решено] TextView + Unicode (GTK)

Модератор: Модераторы разделов

kandrewo
Сообщения: 33
ОС: Gentoo 2007

[Решено] TextView + Unicode

Сообщение kandrewo »

Когда считываю из файла (латинка и кириллица вперемешку) инфу и запихиваю ее в 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);
    }

Кто-то сталкивался с подобным?
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: [Решено] TextView + Unicode

Сообщение sergeyvp »

kandrewo писал(а):
06.10.2007 22:23
Кто-то сталкивался с подобным?

Я с подобным не сталкивался, но возможно нужно задействовать функции перекодировки перед вставкой текста
http://linfoline.homedns.org/API/glib/glib...Conversion.html
Спасибо сказали:
kandrewo
Сообщения: 33
ОС: Gentoo 2007

Re: [Решено] TextView + Unicode

Сообщение kandrewo »

А может быть, что я "разрываю" юникод-символ? Латинка то занимает 1 байт. А кириллица 2. Проверял.
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: [Решено] TextView + Unicode

Сообщение sergeyvp »

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

Re: [Решено] TextView + Unicode

Сообщение sergio »

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

Re: [Решено] TextView + Unicode

Сообщение kandrewo »

Проблемка решилась так:

Код: Выделить всё

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);
  }
Спасибо сказали: