Pyqtを使用してPythonを含む特別なキャラクターを含むQStringを印刷するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4626150

  •  30-09-2019
  •  | 
  •  

質問


特別な文字を含む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をバイト配列/バイテストリングに効果的に変換しようとしています。バイト配列を避けることはできません!

他のヒント

フォローしてみてください:

  1. 追加 # -*- coding: utf-8 -*- あなたのスクリプトの物ggingいで魔法のコメント(詳細 ここ)
  2. 文字列定数で「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

戻り値:

éé

éé

éé

これが役立つことを願っています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top