كيف يمكنني طباعة QString تحتوي على شخصية خاصة مع Python باستخدام Pyqt؟

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"))  

أحتاج حقًا إلى طباعة متغير QString ، وليس QbyTearray أو كائن آخر.

هل كانت مفيدة؟

المحلول

إنه يعمل بالنسبة لي باستخدام 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 ما لم تستخدم ترميزًا محددًا. تدفقات الطباعة تقبل صفائف البايت/البايت ، و str () على كائن Unicode يحاول بشكل فعال تحويل Unicode إلى مجموعة بايت/بايت. لن تكون قادرًا على تجنب صفائف البايت!

نصائح أخرى

حاول المتابعة:

  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

عائدات:

éé

éé

éé

أتمنى أن يساعد هذا ، تحياتي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top