pygtk给TextView设置值的g_utf8_validate问题

在创建GTK程序时,从UTF-8编码的文本文件读取内容并显示到TextView中遇到问题。当尝试将字符串设置到TextView的buffer时,遇到`g_utf8_validate`失败的警告。通过检查发现,尽管文件是UTF-8编码,但字符串末尾包含C标准的NULL字符。解决方案是删除NULL字符,将其转换为unicode,然后再编码为UTF-8,最后成功设置到buffer中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天在写的一个GTK程序内容是从一个文本文件(用utf-8编码)读取内容,并显示在窗口的TextView里,首先需要从TextView获得文本的buffer:

 

然后把字符串放入buffer:

 

这时候发现一个问题,修改textbuffer的时候竟然提示:

 

它的意思是我的字符串不是utf-8,奇怪了,文件的确是用utf-8编码的,那我们来测试一下它到底是不是utf-8:

 

答案竟然是False!

到底是怎么回事呢?算了,不管它先把它转换为unicode:

 

答案是True了,但是写入buffer的时候还是提示那个错误,说验证utf8的时候失败,这是怎么回是呢?

后来才发现,我从文件中读入的字符串的确是utf-8,但是结尾有个C标准的'/0'作为结尾符,而我现在用的Python是自动记录字符串长度的,不需要'/0',那我们就应该把结束符的'/0'去掉:

 

终于成功地设置了TextBuffer的内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值