我想将Gtk.Clipboard.get()返回值转换为utf-8。
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()
最好的问候
答案 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")
操作。