python3-qt4 在 QApplication 构造函数中丢弃 unicode 字符串中的非 ascii 字符
python3-qt4 discards non-ascii characters from unicode strings in QApplication contructor
我正在尝试将基于 PyQt 的应用程序移植到 Python 3. 如果我使用 sys.argv、QApplication.arguments() returns 初始化 QApplication,这些参数没有非-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')
Ubuntu14.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 上报告。
我正在尝试将基于 PyQt 的应用程序移植到 Python 3. 如果我使用 sys.argv、QApplication.arguments() returns 初始化 QApplication,这些参数没有非-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')
Ubuntu14.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 上报告。