#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 !
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
Peut-être que cela t'aideras ?
http://doc.qt.nokia.com/latest/qstring. … de-strings
Hors ligne