如何使用 'Object' 类型变量将特殊字符作为字符串?

How to work 'Object' type variable with special character as string?

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

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

  1. value.split('')

    语法错误:不明确的重载 'split(str)'。考生: QString::split(const QString & sep) QString::split(QChar sep)

  2. str(value)

    UnicodeEncodeError: 'ascii' 编解码器无法对位置 2 中的字符 u'\xb0' 进行编码:序号不在范围内 (128)

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

    AttributeError: 对象没有任何属性

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

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

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

value.decode("ascii", 错误="ignore").encode()

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

我无法使用 Qt 6 的 Squish 重现此问题。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)

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

尝试用 Qt 解码值:

value.toUtf8().constData()