【问题标题】:gtk+ text editor, open python script aborts complaining about invalid utf-8 textgtk+ 文本编辑器,打开 python 脚本中止抱怨无效的 utf-8 文本
【发布时间】:2012-05-31 05:49:06
【问题描述】:

我正处于使用 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?

【问题讨论】:

  • @ergosys,它是一个文本缓冲区。
  • 呸,当然。第一个错误表明它没有被初始化。如果您在调用 set_text 时得到它,那么它什么也不做,这是 gtk_text_buffer_set_text 所做的第一次检查。见第 863 行git.gnome.org/browse/gtk+/tree/gtk/gtktextbuffer.c

标签: c gtk glibc


【解决方案1】:

原来我试图在错误的函数上捕获错误。引发错误的函数是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");
} 

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 2010-09-18
    • 2015-05-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2018-03-24
    相关资源
    最近更新 更多