PyQt4的:在trUtf8字符串中的非ASCII字符检测(PyQt4: Non-ASCII cha

2019-10-22 05:46发布

我试图找出如何养活PyQt的tr()trUtf8()函数UTF-8文本。

下面举例说明字符串:

self.tr('λληνικά')
self.tr(u'εληνικά')
self.tr('ελνικά'.encode('utf-8'))
self.tr(u'ελληικά'.encode('utf-8'))
self.trUtf8('λληνικ')
self.trUtf8(u'εληνιά')
self.trUtf8('ελνι'.encode('utf-8'))
self.trUtf8(u'ελλκά'.encode('utf-8'))

与那些self.tr显示在Qt语言乱码。 与那些self.trUtf8显示效果细腻,但应用时,他们触发警告pylupdate4

Non-ASCII character detected in trUtf8 string

领先的U和.encode('utf-8')似乎并没有什么差别,至少在(使用解析时间pylupdate4 )。

什么是进行正确的方法是什么?

我也想知道这个线的作用:

QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName("utf-8"))

但我知道它有对文件的解析没有影响pylupdate4 ,它只能使在执行时的差异。

Answer 1:

之间的差trtrUtf8 ,在于后者明确声明该编码是UTF-8

就其本身而言, tr并不意味着要对字符串的编码,所以你必须要么只给它传递ASCII字符串,或明确设置使用适当的编码setCodecForTr 。 但是,正如你猜测,这将只在运行时的效果。 为了pylupdate也使用的编码,您需要设置相应的变量在Pro文件:

CODECFORTR = UTF-8
SOURCES = source.py
TRANSLATIONS = translation.ts

(似乎pylupdate将呈现latin-1没有这种编码,因此在该编码不提供任何的字符将最终成为变为乱码)。

至于警告的消息:他们可能没有反映在相应的警告Qt的文档的trUtf8关于可移植性问题。

到proceeed最好的办法是使用tr ,并明确将编码设置为UTF-8trUtf8功能是有效的Qt4过时。 它甚至不存在QT5,它假定UTF-8的一切-所以最后你甚至不会需要明确设置编码。



文章来源: PyQt4: Non-ASCII character detected in trUtf8 string