Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/06/2011, à 14:02

toitoinebzh

python pyQt : convertir QString en string

Bonjour
je cherche un moyen de convertir un QString en string dans python
cela marche bien quand il n'y a pas de caractère accentués, sinon ça coince

In [1]: from PyQt4 import QtGui,QtCore

In [2]: a=QtCore.QString('a')

In [3]: str(a)
Out[3]: 'a'

In [4]: a=QtCore.QString('aé')

In [5]: str(a)
---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)

/home/antoine/<ipython console> in <module>()

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)

Hors ligne

#2 Le 19/06/2011, à 08:44

omc

Re : python pyQt : convertir QString en string

Bonjour,
C'est normal les strings python "fonctionnent" avec du "plain ascii", c'est à dire des caractères non accentués (codé sur 7 bytes).
Pour faire du caractère accentué il faut utiliser le type unicode.

>>> from PyQt4 import QtGui,QtCore
>>> a=QtCore.QString('aéç')
>>> str(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128)
>>> unicode(a)
u'a\xc3\xa9\xc3\xa7'
>>> 

Aprés je ne sais pas ce que tu veux faire mais l'unicode, c'est chiant ! smile

Hors ligne

#3 Le 19/06/2011, à 13:46

toitoinebzh

Re : python pyQt : convertir QString en string

salut

oui l'unicode ça m’embête

en fait je récupère un nom de dossier avec un QFileDialog.getExistingDirectory
j'obtiens alors un QString que je convertir en string
ce string je m'en sers alors pour créer de nouveaux fichiers dans le dossier

du coup j'ai un bug quand mon dossier contient en caractère non ascii

Hors ligne

#4 Le 19/06/2011, à 19:14

omc

Re : python pyQt : convertir QString en string

La fonction standart "open" de python accepte l'unicode, donc il n'y a pas de soucis

Hors ligne

#5 Le 19/06/2011, à 20:42

toitoinebzh

Re : python pyQt : convertir QString en string

salut
je ne me sers pas de open mais de urllib.urlretrieve

j'ai besoin de définir le chemin sur le disque dur du fichier que je télécharge

In [1]: from PyQt4 import QtGui,QtCore

In [2]: dossier=QtCore.QString('aéç')

In [3]: fichier='ae'

In [4]: unicode(dossier)
Out[4]: u'a\xc3\xa9\xc3\xa7'

In [5]: unicode(dossier)+unicode(fichier)
Out[5]: u'a\xc3\xa9\xc3\xa7ae'

In [6]: print unicode(dossier)+unicode(fichier)
aéçae

In [7]: fichier='aé'

In [8]: unicode(dossier)+unicode(fichier)
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)

/home/antoine/<ipython console> in <module>()

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

Hors ligne

#6 Le 19/06/2011, à 21:07

omc

Re : python pyQt : convertir QString en string

Re !
Faut mettre un 'u' avant la chaine de caractère pour signifier qu'il s'agit d'unicode

>>> dossier_qt = QtCore.QString(u'aéç')
>>> dossier = unicode(dossier_qt)
>>> fichier = u'ç_è(é'
>>> path = dossier + fichier
>>> print path
aéçç_è(é
>>> 

Dernière modification par omc (Le 19/06/2011, à 21:07)

Hors ligne

#7 Le 19/06/2011, à 22:13

toitoinebzh

Re : python pyQt : convertir QString en string

salut

je voudrais bien mais ce u je ne peux pas le mettre
c'est un QFileDialog qui me renvoie le QString de dossier_qt

le nom du fichier est un string récupérer sur le net par le biais de urllib.urlretrieve

Hors ligne

#8 Le 20/06/2011, à 16:47

omc

Re : python pyQt : convertir QString en string

Hors ligne