Как работать с переменной типа «Объект» со спецсимволом в виде строки? - PullRequest
0 голосов
/ 25 сентября 2019

Я провожу некоторое тестирование текстового элемента пользовательского интерфейса из приложения Qt.В нем есть особый характер.Когда я пытаюсь получить текст с помощью Squish, тип полученного значения - Object.Конечная цель - выполнить некоторые операции над ним, например распечатать его или сравнить с другой строкой.Также совершенно нормально избавиться от специального символа и посмотреть только на оставшееся значение.

Чтобы выяснить, что я могу сделать с этим значением, я попробовал следующее:

  1. value.split('')

    SyntaxError: Неоднозначная перегрузка 'split (str)'.Кандидаты: QString :: split (const QString & sep) QString :: split (QChar sep)

  2. str(value)

    UnicodeEncodeError: кодек «ascii» не можеткодировать символ u '\ xb0' в позиции 2: порядковый номер не в диапазоне (128)

  3. value.encode('utf-8')

    AttributeError: Объект не имеет каких-либо свойств

  4. unicode(value, error='replace')

    TypeError: принуждение к Unicode: нужна строка или буфер, объект найден

Обычно в другом случае я могу использоватьstr () хорошо, так как нет специального символа.Это из Python 2, и обновление на самом деле не вариант, так как это довольно большой проект и требует времени.Пожалуйста, дайте мне несколько советов, если это можно сделать в любом случае.Спасибо.

Ответы [ 4 ]

0 голосов
/ 27 сентября 2019

Попробуйте декодировать значение с помощью Qt:

value.toUtf8().constData()
0 голосов
/ 25 сентября 2019

Таким образом, используя dir() для этого значения, я обнаружил, что можно использовать функцию QString.После еще нескольких экспериментов я нахожу QString &QString::replace(int position, int n, const QChar *unicode, int size) единственным методом, который я могу использовать, не сталкиваясь с ошибкой Неоднозначная перегрузка.Затем просто замените специальный символ и используйте оставшееся значение.

0 голосов
/ 26 сентября 2019

Я не могу воспроизвести эту проблему с Squish для Qt 6.5.x, Python 2.7:

import os

def main():
    startApplication("%s/examples/qt/addressbook/addressbook" % os.getenv("SQUISH_PREFIX"))
    o = waitForObject({"type": "MainWindow"})
    o.windowTitle = "ä"
    str(o.windowTitle)

(Опубликовано как ответ, так как комментарий не поддерживает несколько строк, но не подразумевается как ответ.)

0 голосов
/ 25 сентября 2019

value.decode ("ascii", errors = "ignore"). Encode ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...