【问题标题】:How to work 'Object' type variable with special character as string?如何使用特殊字符作为字符串的“对象”类型变量?
【发布时间】:2019-09-25 06:30:09
【问题描述】:

我正在对来自 Qt 应用程序的文本 UI 元素进行一些测试。它有一个特殊的字符。当我尝试使用 Squish 获取文本时,接收到的值类型是 Object。最终目标是对其进行一些操作,例如将其打印出来或与另一个字符串进行比较。去掉特殊字符,只看剩余值也完全没问题。

为了找出我可以用这个值做什么,我尝试了以下方法:

  1. value.split('')

    语法错误:不明确的重载“split(str)”。候选人: QString::split(const QString & sep) QString::split(QChar sep)

  2. str(value)

    UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 2: ordinal not in range(128)

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

    AttributeError: 对象没有任何属性

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

    TypeError:强制转换为 Unicode:需要字符串或缓冲区,找到对象

通常在其他情况下,我可以很好地使用 str(),因为没有特殊字符。这是来自 Python 2,升级并不是一个真正的选择,因为它是一个相当大的项目并且需要时间。如果无论如何都可以这样做,请给我一些建议。谢谢。

【问题讨论】:

  • 你使用的是什么版本的 Squish?

标签: python python-2.7 qt squish


【解决方案1】:

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

【讨论】:

  • 谢谢,但实际上我根本无法使用 .decode 或 .encode,就像在第三个示例中一样
【解决方案2】:

因此,在该值上使用dir(),我发现可以使用 QString 函数。经过更多的实验,我发现QString &QString::replace(int position, int n, const QChar *unicode, int size) 是我可以使用的唯一方法,而不会遇到错误模糊重载。然后只需将特殊字符替换掉并使用剩余的值。

【讨论】:

    【解决方案3】:

    我无法使用 Squish for 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)
    

    (作为答案发布,因为评论似乎不支持多行,但并不意味着作为答案。)

    【讨论】:

      【解决方案4】:

      尝试用 Qt 解码值:

      value.toUtf8().constData()
      

      【讨论】:

        猜你喜欢
        • 2022-11-25
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多