相当于PyQt5

时间:2018-03-20 15:36:09

标签: python-3.x pyqt5 porting qstring qbytearray

我正在寻找一种用PyQt5代码替换以下C ++行的方法:

QString messageString = QString::fromLocal8Bit(aMultiformMessage.data(), aMultiformMessage.size());

其中aMultiformMessage是QByteArray。 有任何想法吗? PyQt5文档(在Things to be aware of中)仅表明:

  

Qt使用QString类来表示Unicode字符串,以及   QByteArray表示字节数组或字符串。在Python v3中   相应的本机对象类型是str和bytes。

但它没有解释如何替换相应Qt类(QString,QByteArray)的方法。

1 个答案:

答案 0 :(得分:1)

作为the documentation explains,在PyQt5中,QString自动转换为str(Python 3)或unicode(Python 2)对象。因此,这些方法被这些Python类型提供的任何功能“替换”。 QByteArray类保持不变。

如果您知道您的消息数据被编码为UTF-8,那么最简单的等同于您的C ++代码行将是:

messageString = bytes(aMultiformMessage).decode()

但是,如果使用其他编码,则可以明确指定:

messageString = bytes(aMultiformMessage).decode('latin-1')

如果您确实需要本地编码,可以使用getpreferredencoding()locale模块获取。但是,采用Qt路径可能更简单,并使用QTextCodec类:

messageString = QTextCodec.codecForLocale().toUnicode(aMultiformMessage)

这正是fromLocal8bit()用于将QByteArray转换为QString的内容。 (请注意,这种方法是线程安全的,而getpreferredencoding可能并非总是如此)。