尝试此gtk代码时:
.run
我收到此错误:
import gtk
tv = gtk.TextView()
b = tv.get_buffer()
t = "Let's check this out.\x00"
b.set_text(t)
例如,我在这里自动生成了文本。我想将该字符串放入文本缓冲区但我无法做到。帮助我解决这个问题。
答案 0 :(得分:1)
我认为这是由于字符串t
(\x00
部分)末尾的嵌入式0字节奇怪。
我认为你不能期望/要求GTK +支持GtkTextBuffer中的二进制数据,它只需要文本为UTF-8。删除虚假的0字节。
我认为Python会将字符串的长度报告为n
,而GTK +中的C代码会尝试验证嵌入式'\0'
的编码,并将其视为结束-of-字符串。
请注意fast_validate_len()
(g_utf8_validate()
的实现的一部分)将其输入视为0终止,即使它也有明确的长度。
答案 1 :(得分:1)
官方g_utf8_validate
documentation表示该函数会为任何NUL字节返回./a.out
。这与他的名字形成对比,因为NUL字节是有效的UTF-8代码点。
在我看来,这是一个普通的错误:如果字符串应该以nul为终止,那么所有false
个参数的目的是什么?无论如何,这是实际情况,在不久的将来不会改变。你应该处理它,例如从字符串中删除每个NUL字节或将其转换为另一个代码点。
答案 2 :(得分:1)
我只是假设我在上面评论中提到的是你想要做的事情。
虽然C字符串以\x00
字节结尾,但是当您将字符串与其他编程语言一起使用时,您不必这样做。将C库与您选择的编程语言绑定的库可以帮到您。在这种情况下,pygtk会为你做C字符串。因此,您不必在字符串末尾有明确的\x00
。摆脱它,代码应该再次工作。