gtk运行时错误gtk_text_buffer_emit_insert assertion g_utf8_validate (text, len, NULL) faile

⌚Time: 2025-01-19 16:45:00

👨‍💻Author: Jack Ge

gtk在打印、显示中文字符时有可能会有下面的错误

gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' faile
Pango-CRITICAL **: pango_attr_list_unref: assertion `list->ref_count > 0' failed

[Invalid UTF-8]

之类的一些报错提示,而中文要么显示不了,要么是方框乱码。这个我以前在csdn博客总结过,现在又遇到了,就是使用两个函数转换

指定字符集进行转换:UTF-8->GB2312

g_convert("顶顶顶", -1, "GB2312", "UTF-8", NULL, NULL, NULL);

或者把本地编码转换成utf8

g_locale_to_utf8("顶顶顶",-1,0,0,0);

将这些字符转换成标准的utf-8编码之后在控件上显示就没问题。另外还有专门的iconv库也可以实现字符的编码转换。我也在csdn写过用法。

总之就是编码的问题。源代码不是utf-8编码,里面的中文字符也不是utf-8编码。或者读取的字符文件不是utf-8编码。文件路径名有中文之类的,对这些字符串转换一下编码就行了。