Pyqtを使用してPythonを含む特別なキャラクターを含むQStringを印刷するにはどうすればよいですか?
質問
特別な文字を含むQString変数を単純に印刷することはできませんでした。
私はいつもUnicodeEncodeErrorを取得します:
「ASCII」コーデックは、文字を位置にエンコードできません。
これが私が成功せずに試したコードです:
var1 = "éé" #idem with u"éé"
var2 = QString (var1)
print var2
--->>> UnicodeEncodeError
print str(var2)
--->>> UnicodeEncoreError
var3 = QString.fromLocal8Bit (var1) #idem with fromLatin1 and fromUtf8
print var3
--->>> UnicodeEncodeError
codec = QTextCodec.codecForName ("UTF-8") #idem with ISO 8859-1
var4 = codec.toUnicode (var2.toUtf8().data()) #idem with toLatin1 instead of toUtf8
print var4
--->>> UnicodeEncodeError
私も使用しようとしました:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))
Qbytearrayや他のオブジェクトではなく、QString変数を印刷する必要があります。
解決
それは私に使用しています toUtf8()
:
>>> s = u'éé'
>>> qs = QString(s)
>>> qs
PyQt4.QtCore.QString(u'\xe9\xe9')
>>> print qs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> print qs.toUtf8()
éé
>>>
内部データはユニコードである必要があるため、使用する必要があります u'éé'
ただではなく 'éé'
あなたがあなたの質問であなたの中で述べたように。あなたのコメントはさえ言っています u'éé'
.
アップデート: 申し訳ありませんが、印刷または str()
Unicodeでは、特定のエンコードを使用しない限り、Unicodeオブジェクトで作業することが保証できません。印刷ストリームは、バイト配列/バイテストリングを受け入れ、UnicodeオブジェクトのStr()は、Unicodeをバイト配列/バイテストリングに効果的に変換しようとしています。バイト配列を避けることはできません!
他のヒント
フォローしてみてください:
- 追加
# -*- coding: utf-8 -*-
あなたのスクリプトの物ggingいで魔法のコメント(詳細 ここ) - 文字列定数で「u」文字列宣言を使用します
以下は私に役立つ例です
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
var1 = u"éé" #idem with u"éé"
print var1
var2 = QtCore.QString(var1)
print var2
var3 = QtCore.QString(u"éé")
print var3
戻り値:
éé
éé
éé
これが役立つことを願っています
所属していません StackOverflow