python Gtk.Clipboard.get()gtk3返回值不同

时间:2012-05-29 18:23:01

标签: python clipboard gtk3

我想将Gtk.Clipboard.get()返回值转换为utf-8。

gtk3

from gi.repository import Gtk, Gdk

def main():
    clip = Gtk.Clipboard.get (Gdk.SELECTION_PRIMARY)
    text=clip.wait_for_text ()
    print text
    text=text.encode("utf-8")
    print text 

main()

仅当所选文本仅保留ascii字符时才有效,但如果有一些国家字符(法语/德语等),我会从text.encode(..)函数中得到错误: UnicodeDecodeError:'ascii'编解码器无法解码位置1中的字节0xc3:序数不在范围内(128)

您是否了解问题的位置以及如何使gtk3版本正常工作?

当我使用gtk2的gtk.clipboard_get()函数时,这是正确的:

import gtk

def main():
    clip = gtk.clipboard_get ('PRIMARY')
    text=clip.wait_for_text ()
    print text
    text=text.encode("utf-8")
    print text 
main()

最好的问候

2 个答案:

答案 0 :(得分:0)

这里只是一个猜测。根据文档,剪贴板的wait_for_text()方法已经被认为可以为您提供UTF-8编码的字符串。可能是GTK 3版本错误地返回str而不是unicode对象。要测试这一点,请尝试添加

print type(text)

看看它是什么类型的对象。

您可以尝试utext = text.decode('utf8')获取unicode个对象。

答案 1 :(得分:0)

wait_for_text()确实返回str类型,但这不是错误:utf-8字符串由str类型表示。

我还想到这条线总会产生错误:

some_Unicode_String_With_Non_Ascii.encode("utf-8").encode("utf-8"),

因此我的gtk3示例表现正常。作为结论:应删除text.encode("utf-8")操作。