- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试弄清楚如何向 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
的文件解析没有影响,它只能在执行时产生影响。
最佳答案
tr
和 trUtf8
之间的区别在于,后者显式声明编码为 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-8
。 trUtf8
函数在 Qt4 中实际上已过时。它甚至不存在于 Qt5 中,Qt5 假定所有内容都采用 UTF-8
- 因此最终您甚至不需要显式设置编码。
关于python - PyQt4:在 trUtf8 字符串中检测到非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962869/
我是一名优秀的程序员,十分优秀!