1

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()

よろしくお願いします

4

2 に答える 2

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")操作を削除する必要があります。

于 2012-06-01T13:30:25.823 に答える
0

ここで推測します。wait_for_text()ドキュメントによると、クリップボードのメソッドはすでに UTF-8 でエンコードされた文字列を提供することになっています。GTK 3 バージョンが誤ってオブジェクトstrではなくa を返している可能性がありunicodeます。これをテストするには、追加してみてください

print type(text)

どのようなオブジェクトかを確認します。

utext = text.decode('utf8')オブジェクトの取得を試みることができunicodeます。

于 2012-05-31T19:04:51.567 に答える