0

我正处于使用 gtk+ 2.0 和 gtksourceview 2.0 编写文本编辑器的调试阶段。当我打开某些文件(以前在 geany 中编辑,通常是 python 文件)时,编辑器崩溃并显示以下输出:

(ledit:23515): Gtk-CRITICAL **: IA__gtk_text_buffer_set_text: assertion `GTK_IS_TEXT_BUFFER (buffer)' failed
**
GLib:ERROR:gutf8.c:1915:_g_utf8_make_valid: assertion failed: (g_utf8_validate (string->str, -1, NULL))
Aborted

我试图按如下方式捕获此错误:

char *path,*string;
GtkTextBuffer *tbuffer;
gsize length = -1;


path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
g_file_get_contents(path,&string,&length,NULL); 
if (g_utf8_validate(string,length,NULL))
{
  ...
  gtk_text_buffer_set_text(tbuffer,string,-1);
  ...
}
else
{
  printf("invalid utf-8 data\n");
} 

但这不起作用。我有两个问题:

  1. 为什么这未能捕获错误?
  2. 我还能做些什么来使字符串在运行中有效 utf-8?
4

1 回答 1

0

事实证明,我试图在错误的函数上捕获错误。引发错误的函数是g_file_get_contents. 我修改了如下所示的代码块,问题文件现在可以正常打开,我对此感到有些困惑,因为它仍在执行引发错误的相同功能,但现在处于 if 的状态声明,它工作正常???

char *path,*string;
GtkTextBuffer *tbuffer;
gsize length = -1;


path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));

if ( g_file_get_contents(path,&string,&length,NULL) )
{
  ...
  gtk_text_buffer_set_text(tbuffer,string,-1);
  ...
}
else
{
  printf("file did not open\n");
} 
于 2012-05-31T19:34:56.947 回答