2016-02-28 2 views
0

Я не могу заставить PyQt отображать строку со специальными символами правильно. Из действия перетаскивания я заканчиваю имена файлов как QString, которые могут содержать пробел или один из уродливых немецких UmlautePyQt QString маскирует специальные символы и не отображается правильно

Для простоты рассмотрим, что это имя файла, с которым я бы хотел обработать: 'abc defä.ghi', полученный QString I get is 'abc%20.def%C3%A4.ghi'. Теперь я просто хочу напечатать оригинальную строку:

from PyQt4.QtCore import QString, QTextCodec, QTextDecoder 
s = QString('abc%20.def%C3%A4.ghi') 
print s, unicode(s), s.toUtf8() 

Ничего не работает, и я боюсь, что мне не хватает очевидного.

ответ

2

Не знаете, откуда вы получаете данные, но это, очевидно, не кодируется UTF-8. Это процентное кодирование - так из Интернета, так или иначе?

Во всяком случае, он должен быть расшифрован, как это в python2:

>>> b = QtCore.QByteArray.fromPercentEncoding('abc%20.def%C3%A4.ghi') 
>>> b.data() 
'abc .def\xc3\xa4.ghi' 
>>> s = b.data().decode('utf8') 
>>> print s 
abc .defä.ghi 
+0

На самом деле это не из Интернета, но в результате drag'n'drop из перетаскивания файлов из проводника Windows в QListWidget. Я полностью пропустил метод fromPercentEncoding QByteArray. Я был немного смущен знаком '%', но, очевидно, не думал об этом полностью – MichaelA