python3-qt4在QApplication构造函数中丢弃unicode字符串中的非ascii字符

时间:2015-01-09 21:10:59

标签: python python-3.x unicode pyqt pyqt4

我试图将基于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

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上报告。