我试图将基于PyQt的应用程序移植到Python 3.如果我使用sys.argv初始化QApplication,QApplication.arguments()将返回那些没有非ascii字符的参数。解决方法是将参数编码为字节。但我很难相信它是最好的方法。为什么PyQt不能接受unicode字符串?也许某些区域设置需要调整?
示例代码:
#! /usr/bin/python3
from PyQt4.QtGui import QApplication
args = ["test", "tsch\u00fcss", "tsch\u00fcss".encode("utf-8")]
print("args:", args)
qapp = QApplication(args)
qargs = qapp.arguments()
print("qargs:", qargs)
输出:
args: ['test', 'tschüss', b'tsch\xc3\xbcss']
qargs: ['test', 'tschss', 'tschüss']
没有区别的事情:
import sip
sip.setapi("QString", 2)
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
Ubuntu 14.10,python3-pyqt4 4.11.2 + dfsg-1
答案 0 :(得分:2)
这看起来像PyQt中的一个错误,因为它由PySide正确处理。
似乎没有理由为什么args在传递给应用程序构造函数之前无法正确编码:
>>> import os
>>> from PyQt4 import QtCore
>>> args = ['føø', 'bær']
>>> app = QtCore.QCoreApplication([os.fsencode(arg) for arg in args])
>>> app.arguments()
['føø', 'bær']
如果您希望修复此问题,请在PyQt Mailing List上报告。