我正在尝试将基于 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
最佳答案
这看起来像是 PyQt 中的一个错误,因为 PySide 可以正确处理它。
似乎没有理由不能在传递给应用程序构造函数之前对参数进行正确编码:
>>> 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 上报告。 .
关于python3-qt4 在 QApplication 构造函数中丢弃 unicode 字符串中的非 ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869281/