2012-05-29 104 views
1

我想Gtk.Clipboard.get()的返回值轉換爲UTF-8。蟒蛇Gtk.Clipboard.get()gtk3返回值不同

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版本工作?

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

只是一個猜測這裏:

當我使用GTK2的gtk.clipboard_get()函數這工作是正確的。剪貼板的wait_for_text()方法,根據該文件,已經應該給你UTF-8編碼字符串。這可能是GTK的3.0版本被錯誤地返回str而不是unicode對象。爲了驗證這一點,嘗試添加

print type(text) 

,看看它是什麼類型的對象。

你可以嘗試utext = text.decode('utf8')獲得unicode對象。

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")操作應該被刪除。