繁体   English   中英

如何使用特殊字符作为字符串的“对象”类型变量?

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

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

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

  1. value.split('')

    SyntaxError:模棱两可的重载'split(str)'。 候选: QString::split(const QString & sep) QString::split(QChar sep)

  2. str(value)

    UnicodeEncodeError:'ascii' 编解码器无法在 position 2 中编码字符 u'\xb0':序数不在范围内(128)

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

    AttributeError: Object 没有任何属性

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

    类型错误:强制转换为 Unicode:需要字符串或缓冲区,找到 Object

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

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

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

对于 Qt 6.5.x、Python 2.7,我无法使用 Squish 重现此问题:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM