4


特殊文字を含む 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 変数を出力する必要があります。

4

2 に答える 2

5

それは私のために使用し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()
éé
>>>

内部データはUnicodeである必要があるため、質問で述べたとおりに使用するのu'éé'ではなく、を使用する必要があり'éé'ます。あなたのコメントも言っていますu'éé'

更新:申し訳ありませんが、特定のエンコーディングを使用しない限り、印刷またはstr()Unicodeでの動作はUnicodeオブジェクトでの動作を保証できません。印刷ストリームはバイト配列/バイト文字列を受け入れ、Unicodeオブジェクトのstr()は事実上Unicodeをバイト配列/バイト文字列に変換しようとしています。バイト配列を回避することはできません。

于 2011-01-07T16:45:44.983 に答える
1

以下を試してください:

  1. # -*- coding: utf-8 -*-スクリプトの始めに魔法のコメントを追加します (詳細はこちら)
  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

戻り値:

えー

えー

えー

これが役に立てば幸いです、よろしく

于 2011-01-08T14:54:19.487 に答える