python Gtk.Clipboard.get() возвращаемое значение 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 не может декодировать байт 0xc3 в позиции 1: порядковый номер не в диапазоне(128)

У вас есть идея, в чем проблема и как заставить работать версию gtk3?

Это работает правильно, когда я использую функцию gtk.clipboard_get() gtk2:

import gtk

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

с уважением


person mat    schedule 29.05.2012    source источник


Ответы (2)


Просто предположение здесь. Метод буфера обмена wait_for_text(), согласно документации, уже должен давать вам строки в кодировке UTF-8. Возможно, версия GTK 3 ошибочно возвращает объект str вместо объекта unicode. Чтобы проверить это, попробуйте добавить

print type(text)

чтобы увидеть, что это за объект.

Вы можете попробовать utext = text.decode('utf8') получить объект unicode.

person ptomato    schedule 31.05.2012

wait_for_text() возвращает тип str, но это не ошибка: строки utf-8 представлены типом str.

Мне также пришло в голову, что эта строка всегда будет выдавать ошибку:

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

Таким образом, мой пример gtk3 ведет себя правильно. Как вывод: text.encode("utf-8") операция должна быть удалена.

person mat    schedule 01.06.2012