从包含QString的变量中创建unicode

rap*_*pid 8 python qt qt4 pyqt

我有QPlainTextEdit字段,其中包含国家字符的数据(iso-8859-2).

tmp = self.ui.field.toPlainText() (QString type)
Run Code Online (Sandbox Code Playgroud)

当我做:

tmp = unicode(tmp, 'iso-8859-2') 
Run Code Online (Sandbox Code Playgroud)

我得到问号而不是国家字符.如何将QPlainTextEdit字段中的数据正确转换为unicode?

ser*_*nko 3

正如所说,QPlainTextEdit.toPlainText() 返回应该是 UTF-16 的 QString,而 unicode() 构造函数需要一个字节字符串。下面是一个小例子:

\n\n
tmp = self.field.toPlainText()\nprint \'field.toPlainText: \', tmp\n\ncodec0 = QtCore.QTextCodec.codecForName("UTF-16");\ncodec1 = QtCore.QTextCodec.codecForName("ISO 8859-2");  \n\nprint \'UTF-16: \', unicode(codec0.fromUnicode(tmp), \'UTF-16\')\nprint \'ISO 8859-2: \', unicode(codec1.fromUnicode(tmp), \'ISO 8859-2\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

该代码产生以下输出:

\n\n
\n

field.toPlainText:测试 \xc3\x96\xc3\x84 \xd1\x8d\xd1\x82\xd0\xbe\n \xd0\xba\xd0\xb8\xd1\x82\xd0\xb0\xd0\xb9\xd1\ x81\xd0\xba\xd0\xb8\xd0\xb9:\xe6\x9c\x80\xe4\xb8\xbb\xe8\xa6\x81\xe7\x9a\x84

\n\n

UTF-16:测试 \xc3\x96\xc3\x84 \xd1\x8d\xd1\x82\xd0\xbe \xd0\xba\xd0\xb8\xd1\x82\xd0\xb0\xd0\xb9\xd1\x81\ xd0\xba\xd0\xb8\xd0\xb9:\xe6\x9c\x80\xe4\xb8\xbb\xe8\xa6\x81\xe7\x9a\x84

\n\n

ISO 8859-2:测试 \xc3\x96\xc3\x84 ??? ?????????:\n ????

\n
\n\n

希望这有帮助,问候

\n