PySide中Qt.escape的替代方案?
我正在把一些代码从PyQt移植到PySide,这里面有一个自己写的XML导出器。代码里有很多像这样的行:
Qt.escape(textNote)
这对我来说是新鲜事。我的PyQt书(Summerfield, 2008)上写:
Qt.escape()函数接收一个QString,并返回一个经过处理的字符串,确保任何XML的元字符都被正确转义。而我们...会把笔记中的段落和换行符转换成它们的Unicode等价形式。
但不幸的是,为了从文本创建XML,escape
似乎不再可用了。
我找到的两个来源讨论了这个问题:
http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5#f166611e9788f9dbdff69088d622663e
http://www.kdab.com/automated-porting-from-qt-4-to-qt-5/
不幸的是,他们都建议使用QString.toHtmlEscaped()
,但这个方法在PySide中似乎不存在(实际上,QString并不是PySide的一部分)。
最后,四年前的讨论显示,escape
并不是他们打算在PySide中支持的功能,在一个bug报告中提到过:
经过与其他PySide开发者的讨论,我们决定不导出这个函数,原因如下:
- 这个函数是QtGui的一部分,如果我们创建一个QtGui.Qt,这会导致QtCore.Qt的一些麻烦。
- PyQt4也没有导出这个函数。
- 在Python标准库中有其他函数可以实现相同的目标,比如xml.sax.saxutils.escape()。
所以,我会把这个bug标记为WONTFIX。
这似乎回答了我的问题,但这是四年前的事,我想知道现在是否仍然适用。也就是说,PySide真的没有转义功能吗?那么最好的选择是使用saxutils
吗?或者在PySide中是否有我忽略的类似toHtmlEscaped
的解决方法?
1 个回答
每次你想用
Qt.escape(yourText)
时,其实你可以用
from xml.sax.saxutils import escape as escape
escape(yourText)
来实现完全相同的功能。虽然看起来没那么优雅,但它确实能工作。PySide的开发者在四年前对这个问题的初步反应一直保持一致。