Bonjour,

Je parcours des pages et des pages web sur l'encodage... Mais je finis toujours par m'y perdre.
Là, entre un dictionnaire et une définition qui l'utilise, je ne m'en sort pas.

Je travail sur un script avec les bibliothèques d'Arcgis (arcpy) et ma première ligne est # -*- coding: cp1252 -*-. Je suis en python 2.7.
Je converti un tableau excel qui me revient du terrain en géodatabase Arcgis. Puis je lis les valeurs.
Ces dernières remontent en unicode, ex; u'Ch\xeane', pour 'chêne'.
Je veux retrouver mes codes machines en fonction de ses valeurs.
J'ai donc un dictionnaire des essences forestières avec 1 code machine et un abréger.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
dico_cle_ess ={u'Alisier blanc':("324",u'Ab'),u'Alisier Torminal':("323",u'At'),u'Aucune':("224",u'Aucune'),
    u'Aulne Blanc':("aul_b",u'Ab'),u'Aulne Glutineux':("116",u'Ag'),u'Bouleau pubescent':("97",u'Bp'),
    u'Bouleau verruqueux':("96",u'Bv'),
    u'Ch\xeane':("439",u'Q'),u'Ch\xeane p\xe9doncul\xe9':("56",u'Qp'),u"Ch\xeane rouge d'Am\xe9rique":("57",u'Qra'),
    u'Ch\xeane sessile':("68",u'Qs'),u'Divers':("310",u'Div'),
    u'Douglas':("111",u'Do'),u'Epic\xe9a commun':("100",u'Ec'), u'Erable champ\xeatre':("71",u'Ec'),u'Erable plane':("70",u'Ep'),u'Erable sycomore':("69",u'Es'),
    u'Fr\xeane commun':("80",u'Fc')}
...etc

Si je fais un simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
dico_cle_ess[u'Fr\xeane commun']
Pas de soucis, j'ai la bonne réponse ; Mais comme je vais régulièrement interroger mon dictionnaire et que certaines essences anecdotiques peuvent ne pas être dedans. J'ai créé une définition pour gérer cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
def code_ess(lib):
        try:
            return dico_cle_ess[lib][0].upper()
        except:
            print "ESSENCE non trouver"
        finally:
            return "224"
Mais je n'ai que des retour avec le code '224'.
J'ai donc fait des tests sans 'try/except':
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
def code_ess(lib):
	print lib
 
        return dico_cle_ess[lib][0].upper()
Et là, Oh! surprise !!! Le print dans ma définition, affiche non pas u'Fr\xeane commun', mais Frêne commun. Du coup, la clef de mon dico plante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    code_ess(u'Fr\xeane commun')
  File "<pyshell#48>", line 5, in code_ess
    return dico_cle_ess[repr(lib)]
KeyError: "u'Fr\\xeane commun'"


Est-ce ma variable 'lib' qui réencode ma variable d'origine ou seulement mon print?
Pourquoi cherche-t-il une Key "u'Fr\\xeane commun'", alors que ma variable de départ ne contient pas 2 '\'?

Auriez-vous quelques réponses svp? et/ou solutions svp? Je tourne en boucle là...