Anomalie #55
ferméError python saving in qsp format from an xml format
100%
Description
Hi,
After load a xml 19139 metadata , I tried to save it in qsp format.
This give a python error:
I add the xml used for test.
An error has occured while executing Python code: Traceback (most recent call last): File "C:/Users/andrea/.qgis2/python/plugins\qsphere\ui_catalogue.py", line 691, in SaveAsDataQSP self.MakeSaveQSP(fileName, False) File "C:/Users/andrea/.qgis2/python/plugins\qsphere\ui_catalogue.py", line 706, in MakeSaveQSP SaveQSP(self, fileName) File "C:/Users/andrea/.qgis2/python/plugins\qsphere\importexport.py", line 110, in SaveQSP Config.write(zLOG) File "C:\MY-PRO~1\osgeo4w\apps\Python27\lib\ConfigParser.py", line 412, in write key = " = ".join((key, str(value).replace('\n', '\n\t'))) UnicodeEncodeError: 'ascii' codec can't encode characters in position 580-581: ordinal not in range(128) Python version: 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] QGIS version: 2.6.0-Brighton Brighton, exported Python path: ['C:/MY-PRO~1/osgeo4w/apps/qgis/./python/plugins\\processing', 'C:/MY-PRO~1/osgeo4w/apps/qgis/./python', u'C:/Users/andrea/.qgis2/python', u'C:/Users/andrea/.qgis2/python/plugins', 'C:/MY-PRO~1/osgeo4w/apps/qgis/./python/plugins', 'C:\\MY-PRO~1\\osgeo4w\\bin\\python27.zip', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\DLLs', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\plat-win', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\lib-tk', 'C:\\MY-PRO~1\\osgeo4w\\bin', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\PIL', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\jinja2-2.7.2-py2.7.egg', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\markupsafe-0.23-py2.7-win32.egg', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\python_dateutil-2.2-py2.7.egg', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\pytz-2014.2-py2.7.egg', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\win32', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\six-1.6.1-py2.7.egg', 'C:\\MY-PRO~1\\osgeo4w\\apps\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode', 'C:\\Users\\andrea\\.qgis2\\python\\plugins\\MetaSearch\\ext-libs', '.', 'C:\\MY-PRO~1\\osgeo4w\\apps\\qgis\\python\\plugins\\fTools\\tools']
I'm use qgis 2.6 windows 7 , english interface.
Fichiers
Mis à jour par Andrea Peri il y a environ 10 ans
I forget to say, i'm using the qsphere 2.6.1 with a patch in ui interface from Christophe.
Mis à jour par Andrea Peri il y a environ 10 ans
- Fichier ui_catalogue.zip ui_catalogue.zip ajouté
I add the file patchd before.
Mis à jour par Christophe MASSE il y a environ 10 ans
- Fichier capture_err47_err55.png capture_err47_err55.png ajouté
- Echéance mis à 06/11/2014
- Assigné à mis à Christophe MASSE
- Version cible mis à QSphere 2.6.1
- % réalisé changé de 0 à 100
- Temps estimé mis à 0.00 h
L'erreur n'est pas dans QSphere mais dans le fichier "ConfigParser.py".
Sur mon poste, erreur non reproduite sur le fichier XML joint (cf. capture jointe).
Le problème des caractères provient là-encore de la fonction "str", qui n'est plus présente dans les modules Python (cf. #47)
key = " = ".join((key, str(value).replace('\n', '\n\t')))
Je note aussi par ailleurs que le répertoire d'installation comporte une racine "C:\MY-PRO~1\osgeo4w" (environnement Windows ? Version non distribuée packagée par la communauté mais version via osgeo4w installer). Certaines librairies peuvent être absentes ou non actualisées (d'où les erreurs sur la fonction str).
Dans tous les cas pas de corrections possibles sur une ressource de la distribution QGIS.
Solution alternative ? Utiliser une autre classe que ConfigParser ? Risque d'y trouver également des appels à la fonction "str".
Mis à jour par Christophe MASSE il y a environ 10 ans
- Fichier capture_encodage.png capture_encodage.png ajouté
- Fichier ui_catalogue.py ajouté
- Statut changé de Nouveau à En cours
Même si l'erreur dans le ConfigParser semble connue dans la version 2.7 de Python et corrigée dans les versions suivantes, et ne souhaitant pas modifier le code d'un module externe à QSphere, soupçonnant le contenu du champ Généalogie récupéré la source du problème d'encodage, j'ai placé une tentative d'encodage forcé en UTF-8 sur les contrôles de type QTextEdit de QSphere :
zObj.setPlainText(zText.encode(encoding='UTF-8',errors='strict'))
Sans garantie d'un meilleur comportement ...
Sur mon poste, le résultat est quelque différent de celui obtenu sans ce sur-encoadge (cf. capture_encodage)
A tester ...
Le module comportant la correction est joint.
Mis à jour par Christophe MASSE il y a environ 10 ans
La solution du surencodage ne peut-être retenue, car elle dégrade le contenu sémantique originel du fichier XML.
Recherche en cours sur ce qu'il serait possible d'apporter comme correction en amont du Config.write .
Mis à jour par Christophe MASSE il y a environ 10 ans
- Fichier qsphere_2.6.1.zip qsphere_2.6.1.zip ajouté
J'ajoute l'archive du 7 novembre 2014 de QSphere (version de travail 2.6.1).
Merci à Andrea de regarder si le problème de sauvegarde du projet QGS persiste ...
Je tiens à vérifier si les deux lignes de code suivantes :
reload(sys)
sys.setdefaultencoding('iso-8859-1')
placées dans le ClassFactory (module qsphere.py) influent sur le comportement de la fonction str.
J'ai déjà remarqué sur d'autres développements que les "contextes" portées par d'autres extensions pouvaient influencer sur les extensions voisines et masquer certaines erreurs potentielles.
Mis à jour par Christophe MASSE il y a environ 10 ans
- Statut changé de En cours à Fermé
- % réalisé changé de 70 à 100
Tests réalisés sous LINUX corrects.
Mis à jour par Andrea Peri il y a environ 10 ans
Hi, sorry for late.
:)
I test the 2.6.1 attach to this ticket.
it saved correctly on windows 7 64bit.