PyQt4:在trUtf8字符串中检测到非scii字符

2024-09-30 14:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试如何为PyQt tr()或{}函数提供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'))

在Qt语言学家中,self.tr的显示为胡言乱语。带有self.trUtf8的显示良好,但在应用pylupdate4时会触发警告:

^{pr2}$

前导的u和.encode('utf-8')似乎没有任何区别,至少在解析时(使用pylupdate4)。在

正确的方法是什么?在

我还想知道这条线的作用:

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

但我知道它对pylupdate4的文件解析没有影响,它只会在执行时产生影响。在


Tags: 函数字符串文本self示例qttrpyqt
1条回答
网友
1楼 · 发布于 2024-09-30 14:33:41

tr和{}之间的区别在于后者明确声明编码是UTF-8。在

就其本身而言,tr并不意味着字符串的编码,因此您必须只向它传递ascii字符串,或者使用setCodecForTr显式设置适当的编码。但你只能在运行时产生这种效果。为了使pylupdate也使用该编码,您需要在pro文件中设置相应的变量:

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

(似乎pylupdate将假定latin-1编码,因此该编码中不可用的任何字符都将以mojibake结尾)。在

至于警告消息:它们可能反映了Qt docs for trUtf8中关于可移植性问题的相应警告。在

处理的最佳方法是使用tr,并显式地将编码设置为UTF-8trUtf8函数在Qt4中实际上已过时。它甚至不存在于Qt5中,Qt5假设所有东西都是UTF-8,所以最终您甚至不需要显式地设置编码。在

相关问题 更多 >