3liz / QgisCadastrePlugin

A QGIS plugin which helps users to import the french land registry ('cadastre') data into a database. It is meant to ease the use of the data in QGIS by providing search tools and appropriate layer symbology.
GNU General Public License v2.0
61 stars 41 forks source link

[QGIS 2 / master_2] clic sur parcelle produit une erreur #149

Closed MaelREBOUX closed 6 years ago

MaelREBOUX commented 6 years ago

impossible d'obtenir la fiche info parcelle : erreur :

2018-08-22T10:28:02 1   Traceback (most recent call last):
              File "C:/Users/m.reboux/.qgis2/python/plugins\cadastre\cadastre_menu.py", line 388, in getParcelleInfo
                self.cadastre_search_dialog
              File "C:/Users/m.reboux/.qgis2/python/plugins\cadastre\cadastre_dialogs.py", line 2626, in __init__
                self.setProprietairesContent()
              File "C:/Users/m.reboux/.qgis2/python/plugins\cadastre\cadastre_dialogs.py", line 2732, in setProprietairesContent
                [header, data, rowCount, ok] = cadastre_common.fetchDataFromSqlQuery(self.connector, sql)
              File "C:/Users/m.reboux/.qgis2/python/plugins\cadastre\cadastre_dialogs.py", line 536, in fetchDataFromSqlQuery
                print error_message
            UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 85: ordinal not in range(128)

Même erreur reproduite sur des données millésime 2018 mais importées en version 1.5.3.

mdouchin commented 6 years ago

@MaelREBOUX Est-ce que cette erreur était déjà présente dans des versions précédentes ? Ou avec le millésime précédent. J'aimerais savoir si c'est les fichiers MAJIC qui ont changé ou si c'est le plugin qui a changé.

mdouchin commented 6 years ago

Je viens de pousser des correctifs. @MaelREBOUX peux tu stp tester pour QGIS 2 et QGIS 3 si tout fonctionne bien, avec le millésime 2017 et avec le 2018 ?

brossardm commented 6 years ago

Bonjour à vous. J'ai exactement la même erreur (interrogation des parcelles et éditions de relevés) avec le plugin en version 1.5.0. et 1.5.3 et les versions de Qgis 2.18.16, 2.18.17, 2.18.19, 2.18.23. Par contre avec Qgis 3.20 et le plugin en 1.6.0, il n'y a pas de problème.

mdouchin commented 6 years ago

@brossardm pouvez-vous tester avec QGIS 2.18 et la version de dev actuelle pour QGIS 2, soit: https://github.com/3liz/QgisCadastrePlugin/archive/master_2.zip

Si c'est ok, je sors une version 1.5.4 et 1.6.1 dans la journée pour corriger ce souci (et ajouter le support du millésime 2018)

brossardm commented 6 years ago

Je viens de tester avec la version 2.18.23 et c'est ok ! Merci ;-)

mdouchin commented 6 years ago

Versions 1.6.1 et 1.5.4 sorties et poussées sur le dépôt d'extensions QGIS

mdouchin commented 6 years ago

Merci de fermer la demande si OK

MaelREBOUX commented 6 years ago

salut. Désolé pas pu tester avant ta release.

Je viens de tester et ça refonctionne.

boillodmanuel commented 3 years ago

Bonjour, J'ai rencontré un problème similaire : UnicodeDecodeError: 'ascii' codec can't decode Mon env :

J'ai fini par trouver comment corriger mon problème (la résolution de celui-ci est peut-être similaire)

Dans le fichier cadastre_import.py, fonction replaceParametersInScript, il manque l'encoding sur cette ligne : https://github.com/3liz/QgisCadastrePlugin/blob/2b2c0e3affcf67b49c88bda31f54cdb3b904a617/cadastre/cadastre_import.py#L1015-L1016

Voici le fix:

with open(scriptPath, 'w', encoding='utf-8') as fout:
    fout.write(data)

La locale système ne doit pas être configuré comme il faut dans QGIS. Pour le vérifier, j'ai ouvert la console python (Plugins > Console Python) et exécuté le code suivant :

# Explicitly open with ascii encoding:
# ❌ Error:
#   UnicodeEncodeError: 'ascii' codec can't encode character '\u2122' in position 0: ordinal not in range(128)
with open('/tmp/test', 'w', encoding='ascii') as fout:
    fout.write(u"\u2122")

# Open without encoding specified:
# ❌ Error or ✅ Works depending of system locale :
#   UnicodeEncodeError: 'ascii' codec can't encode character '\u2122' in position 0: ordinal not in range(128)
with open('/tmp/test', 'w') as fout:
    fout.write(u"\u2122")

# Explicitly open with utf-8 encoding:
# ✅ Works
with open('/tmp/test', 'w', encoding='utf-8') as fout:
    fout.write(u"\u2122")

Pour forcer la locale dans QGIS, j'ai ajouté la variable d'environnement LC_ALL dans les préférences (interface en anglais) :.

Je ne suis pas sûr qu'il faille garder ce paramétrage mais ca aide pour débugger.