我正在寻找一种用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)的方法。
答案 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
可能并非总是如此)。