gpt4 book ai didi

python - PyQt4:在 trUtf8 字符串中检测到非 ASCII 字符

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:18 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何向 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 Linguist 中显示为乱码。带有 self.trUtf8 的显示正常,但在应用 pylupdate4 时会触发警告:

Non-ASCII character detected in trUtf8 string

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

正确的操作方法是什么?

我也想知道这一行的作用:

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

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

最佳答案

trtrUtf8 之间的区别在于,后者显式声明编码为 UTF-8

就其本身而言,tr 并不隐含任何有关字符串编码的信息,因此您必须只向其传递 ascii 字符串,或者使用 setCodecForTr 显式设置适当的编码>。但正如您所猜测的,这只会在运行时产生影响。为了让 pylupdate 也使用该编码,您需要在 pro 文件中设置相应的变量:

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

(似乎 pylupdate 将采用 latin-1 编码,而无需这种编码,因此该编码中不可用的任何字符最终都会成为 mojibake)。

至于警告消息:它们可能是为了反射(reflect)Qt docs for trUtf8中的相应警告。关于可移植性问题。

最好的方法是使用 tr 并将编码显式设置为 UTF-8trUtf8 函数在 Qt4 中实际上已过时。它甚至不存在于 Qt5 中,Qt5 假定所有内容都采用 UTF-8 - 因此最终您甚至不需要显式设置编码。

关于python - PyQt4:在 trUtf8 字符串中检测到非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com