Python Qt QLineEdit 奇怪的编码问题
我遇到了一个让我困惑的情况。我在我的界面里有一个文本输入框(QLineEdit),当我在里面输入以下文本时:'(这是亚拉姆语),而且我电脑上安装了正确的字体,所以我在浏览器里可以看到这些字体,但这些字体是我自己安装的,所以你可能会看到一些奇怪的字符。
self.editor = QtGui.QLineEdit(self)
self.editor.setText( ' )
在界面的编辑框里,我能正确看到这些文本,但当我尝试重新提取这些文本时,却得到了奇怪的结果:
editor_text = self.editor.text()
这里我遇到了一个异常:
print(editor_text)
UnicodeEncodeError: 'utf-8' codec can't encode character '\ud802' in position 0:
surrogates not allowed
pprint(editor_text)
"\ud802\udc40\ud802\udc4c\ud802\udc53 \ud802\udc4a\ud802\udc53' "
'\ud802\udc53\ud802\udc41 '
'\ud802\udc40\ud802\udc41\ud802\udc53\ud802\udc44\ud802\udc4c '
'\ud802\udc4f\ud802\udc4b'
我尝试了以下方法:
editor_text = self.editor.text().encode(encoding='utf-8', errors='surrogateescape')
UnicodeEncodeError: 'utf-8' codec can't encode character '\ud802' in position 0:
surrogates not allowed
我该怎么做才能解决这个问题,谢谢。
补充:
当然,我已经添加了头文件。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
2 个回答
0
我只需要做的就是
print unicode(testQLineEdit.text())
2
在源代码的开头加上这个:
#!/usr/bin/env python # -*- coding: utf-8 -*-
你可以看看这个讨论串:PEP索引
在你的阿拉米语字符字符串中,把上面的Python字符串加上'u',这样就可以用unicode模式了,像这样:
u' ܐܪܡܝܐ '
或者
u'Unicode String'
完整的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
class exampleQMainWindow (QtGui.QMainWindow):
def __init__ (self):
super(exampleQMainWindow, self).__init__()
testQLineEdit = QtGui.QLineEdit(self)
testQLineEdit.setText(u'ܐܪܡܝܐ')
print testQLineEdit.text()
self.setCentralWidget(testQLineEdit)
app = QtGui.QApplication([])
window = exampleQMainWindow()
window.show()
sys.exit(app.exec_())
你可以像这样从其他地方获取变量:
text = u'ܐܪܡܝܐ'
testQLineEdit = QtGui.QLineEdit(self)
testQLineEdit.setText(text)
print testQLineEdit.text()
要强制将字符串转换为Unicode,你可以使用 unicode(String)
。
这是返回文本的测试输出类型:
>> print type(unicode(testQLineEdit.text()))
<type 'unicode'>
>> print type(testQLineEdit.text())
<class 'PyQt4.QtCore.QString'>
>> print type(testQLineEdit.text().toUtf8())
<class 'PyQt4.QtCore.QByteArray'>
所有条件都可以在控制台中打印出来。