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

标签 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

最佳答案

这看起来像是 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/

相关文章:

python - IPython 终端使用哪种字符编码?

python - 将列表转换为每两个元素的元组列表

Python 将长度列为字符串

python - 递归只生成一对。我究竟做错了什么?

python - 如何从 curve_fit 获得置信区间

Python 装饰器无法访问被调用的方法

C++使用wstring拆分unicode分隔的字符串

ios - 如何在 iOS 中定位和显示一个 Unicode 字符

python - 两段代码(关于 python GIL)有什么区别?

python - QTreeWidget 关闭选择