Probleme d'accent avec python :

(j’utilise python 2.4.3)
alors voila j’ai fait un petit programme de normalisation postal mais des qu’il s’agit de remplacer les accents genre é par E il me les remplace par des virgules.
Tout le reste marche
J’ai bien lu la doc et rajouté la ligne au debut de mon programme :

pourtant ca merde toujours je ne comprends pas des masses si quelqu’un a une explication
j’ai éssayé en mettant le code latin a la place de utf8 ca n’a pas marché non plus
Merci
Bussiere
voici le code :

[code]# -- coding: utf-8 --
import fileinput, glob, string, sys, os, re,unicodedata

fichA=raw_input(“Entrez le nom du fichier d’entree : “)
print (”\n”)
fichC=raw_input(“Entrez le nom du fichier de sortie : “)
print (”\n”)
normalisation1 = raw_input(“Normaliser les adresses 1 (ex : Avenue-> AV) (O/N) ou A pour tout normaliser \n”)
normalisation1 = normalisation1.upper()

if normalisation1 != “A”:
print ("\n")
normalisation2 = raw_input(“Normaliser les civilités (ex : Docteur-> DR) (O/N) \n”)
normalisation2 = normalisation2.upper()
print ("\n")
normalisation3 = raw_input(“Normaliser les Adresses 2 (ex : Place-> PL) (O/N) \n”)
normalisation3 = normalisation3.upper()

normalisation4 = raw_input("Normaliser les caracteres / et - (ex : / ->   ) (O/N) \n" )
normalisation4 = normalisation4.upper()

if normalisation1 == “A”:
normalisation1 = "O"
normalisation2 = "O"
normalisation3 = "O"
normalisation4 = “O”

fiA=open(fichA,“r”)
fiC=open(fichC,“w”)

compteur = 0

while 1:
fileencoding = "latin-1"
ligneA=fiA.readline()
ligneA = ligneA.decode(fileencoding)

if ligneA == "":

	break 

if ligneA != "":
	str = ligneA
	str = str.replace('a', 'A')
	str = str.replace('b', 'B')
	str = str.replace('c', 'C')
	str = str.replace('d', 'D')
	str = str.replace('e', 'E')
	str = str.replace('f', 'F')
	str = str.replace('g', 'G')
	str = str.replace('h', 'H')
	str = str.replace('i', 'I')
	str = str.replace('j', 'J')
	str = str.replace('k', 'K')
	str = str.replace('l', 'L')
	str = str.replace('m', 'M')
	str = str.replace('n', 'N')
	str = str.replace('o', 'O')
	str = str.replace('p', 'P')
	str = str.replace('q', 'Q')
	str = str.replace('r', 'R')
	str = str.replace('s', 'S')
	str = str.replace('t', 'T')
	str = str.replace('u', 'U')
	str = str.replace('v', 'V')
	str = str.replace('w', 'W')
	str = str.replace('x', 'X')
	str = str.replace('y', 'Y')
	str = str.replace('z', 'Z')
	
	str = str.replace('ç', 'C')
	str = str.replace('Ç', 'C')
	str = str.replace('é', 'E')
	str = str.replace('É', 'E')
	str = str.replace('è', 'E')
	str = str.replace('È', 'E')
	str = str.replace('ê', 'E')
	str = str.replace('Ê', 'E')
	str = str.replace('ë', 'E')
	str = str.replace('Ë', 'E')
	str = str.replace('ä', 'A')
	str = str.replace('Ä', 'A')
	str = str.replace('à', 'A')
	str = str.replace('À', 'A')
	str = str.replace('Á', 'A')
	str = str.replace('Â', 'A')
	str = str.replace('Ä', 'A')
	str = str.replace('Ã', 'A')
	str = str.replace('â', 'A')
	str = str.replace('Ä', 'A')
	str = str.replace('ï', 'I')
	str = str.replace('Ï', 'I')
	str = str.replace('î', 'I')
	str = str.replace('Î', 'I')
	str = str.replace('ô', 'O')
	str = str.replace('Ô', 'O')
	str = str.replace('ö', 'O')
	str = str.replace('Ö', 'O')
	str = str.replace('Ú','U')
	str = str.replace('  ', ' ')
	str = str.replace('   ', ' ')
	str = str.replace('	', ' ')
   
   
	
	if normalisation1 == "O":
		str = str.replace('AVENUE', 'AV')
		str = str.replace('BOULEVARD', 'BD')
		str = str.replace('FAUBOURG', 'FBG')
		str = str.replace('GENERAL', 'GAL')
		str = str.replace('COMMANDANT', 'CMDT')
		str = str.replace('MARECHAL', 'MAL')
		str = str.replace('PRESIDENT', 'PRDT')
		str = str.replace('SAINT', 'ST')
		str = str.replace('SAINTE', 'STE')
		str = str.replace('LOTISSEMENT', 'LOT')
		str = str.replace('RESIDENCE', 'RES')
		str = str.replace('IMMEUBLE', 'IMM')
		str = str.replace('IMEUBLE', 'IMM')
		str = str.replace('BATIMENT', 'BAT')
	
	if normalisation2 == "O":
		str = str.replace('MONSIEUR', 'M')
		str = str.replace('MR', 'M')
		str = str.replace('MADAME', 'MME')
		str = str.replace('MADEMOISELLE', 'MLLE')
		str = str.replace('DOCTEUR', 'DR')
		str = str.replace('PROFESSEUR', 'PR')
		str = str.replace('MONSEIGNEUR', 'MGR')
		str = str.replace('M ME','MME')
		
	
	if normalisation3 == "O":
		str = str.replace('PLACE', 'PL')
		str = str.replace('IMPASSE', 'IMP')
		str = str.replace('ESPLANADE', 'ESP')
		str = str.replace('ROND POINT', 'RPT')
		str = str.replace('ROUTE', 'RTE')
		str = str.replace('PASSAGE', 'PAS')
		str = str.replace('SQUARE', 'SQ')
		str = str.replace('ALLEE', 'ALL')
		str = str.replace('ESCALIER', 'ESC')
		str = str.replace('ETAGE', 'ETG')
		str = str.replace('PORTE', 'PTE')
		str = str.replace('APPARTEMENT', 'APT')
		str = str.replace('APARTEMENT', 'APT')
		str = str.replace('AVENUE', 'AV')
		str = str.replace('BOULEVARD', 'BD')
		str = str.replace('ZONE D ACTIVITE', 'ZA')
		str = str.replace('ZONE D ACTIVITEE', 'ZA')
		str = str.replace('ZONE D AMENAGEMENT CONCERTE', 'ZAC')
		str = str.replace('ZONE D AMENAGEMENT CONCERTEE', 'ZAC')
		str = str.replace('ZONE INDUSTRELLE', 'ZI')
		str = str.replace('CENTRE COMMERCIAL', 'CCAL')
		str = str.replace('CENTRE', 'CTRE')
		str = str.replace('C.CIAL','CCAL')
		str = str.replace('CTRE CIAL','CCAL')
		str = str.replace('CTRE CCAL','CCAL')
		str = str.replace('GALERIE','GAL')
		str = str.replace('MARTYR', 'M')
		str = str.replace('ANCIENS', 'AC')
		str = str.replace('ANCIEN', 'AC')
		str = str.replace('REVEREND PERE','R P')
	
	if normalisation4 == "O":
		str = str.replace(';\"', ' ')
		str = str.replace('\"', ' ')
		str = str.replace('\'', ' ')
		str = str.replace('-', ' ')
		str = str.replace(',', ' ')
		str = str.replace('\\', ' ')
		str = str.replace('\/', ' ')
		str = str.replace('&', ' ')
		str = str.replace('%', ' ')
		str = str.replace('*', ' ')
		str = str.replace('  ', ' ')
		str = str.replace('.', ' ')
		str = str.replace('_', ' ')
		str = str.replace('   ', ' ')
		str = str.replace('	', ' ')
		str = str.replace('?', ' ') 
		str = str.replace('%', ' ')
		str = str.replace('|', ' ')
		
	
	
  
	
	
	
	
	
	
	
	
	str = str.replace('  ', ' ')
	str = str.replace('   ', ' ')
	str = str.replace('	', ' ')
	str = str.encode("utf-8","replace")
	fiC.write(str)
	compteur += 1
	print compteur, "\n"

print "FINIT"
fiA.close()
fiC.close()[/code]

je suis pas dev python, mais en faisant un tour sur Developpez.com, section python, j’ai trouvé ça. C’est une piste. pas la solution.

http://www.developpez.net/forums/viewtopic…5dd2a8bef40bd1a

qui plus est, tu as de plus grandes chance d’obtenir une réponse en postant sur ce forum.

merci je vais y jeter un coup d’oeil intérréssé
thks
Bussiere
edit :
ca marche merchiiiiiiiiiiiiiiii (en gros changer le fichier de conf de ptyhon meme si c’est lourd comme solution et pas elegant (notamment dans le cas d’un deploiement :/)
enorme tes signatures :stuck_out_tongue:
je peux te les piquer ?

en meme temps, l’utf 8 c’est le mal. a part si tu as de grosse contraintes en amont du projet qui t’obligent a utiliser l’utf 8…

on voit souvent des bizarreries avec UTF, notamment sur IRC ou les é è et autre à sont remplacés par des Ão ou autres conneries.

Die utf8, die.

ok je passerai en iso

mais svp arretez avec vos signatures on va croire que je vous paye :stuck_out_tongue:

Bussiere
(passez au service compta apres merci)

Sans troller, l’UTF-8 n’est pas le mal.

Ce qui est le mal par contre, c’est que tout ne soit pas directement en UTF-8, et c’est ca qui pose probleme.

Demandez a vos amis Chinois, Corren, Japonais si ISO c’est suffisant ?

Sans parler du fais que les programmeurs fonctionnels attendent avec impatience l’UTF-8 partout pour pouvoir ecrire des vrais « lambda » (-) ou « appartient a » au lieu de faire de l’ascii art: « <- ».

Ok, nous ne sommes pas tous dans ce cas, et UTF-8 nous pose des contraintes et des problemes, mais ce n’est pas directement sa faute :stuck_out_tongue:

Absolument, puisque la dernière version de DrScheme (scheme est un langage fonctionnel) est désormais en UTF-8 ^^

Euh non, absolument, carrement, categoriquement pas. UTF8 c’est tres bien. Les clients (ou les serveurs) retardés qui sont en retard sur leur epoque et qui ne savent pas negocier autre chose ou pire ne comprennent que l’ascii avec une codepage arbitraire : ca c’est le mal. Et ceux qui utilisent leur experience avec IRC pour juger… Utiliser un encoding multibyte partout par defaut, c’est un peu devenu la regle. Ca complique un peu la chose (quel encoding/little endian-big endian/etc) mais ca fait parti des choses a gerer. Aujourd’hui la localisation et les applications internationalles c’est « un peu » important et, si on peut choisir de ne pas en tenir comte dans des cas particuliers, en regle generale les programmeurs qui savent pas pourquoi et comment ca marche (et ca se limite pas au remplacement de chaines), ou qui cherchent a l’ignorer, font mal leur boulot.

J’aillais vous demander ce que vous aviez tous contre UTF-8 qui me parait être l’avenir, mais GloP l’a fait. Un petit article pour vous convaincre.

Merci c’est super intéressant :stuck_out_tongue:

Tout simplement que beaucoup de projets ne sont pas déstinés à etre localisés, donc n’en ont super pas besoin d’UTF-8. Alors que l’investissement humain pour porter les applis existantes n’est clairement pas négligeable. Je suis admin système et du coup c’est moi qui me tape le sale boulot pour convertir les bases, reconfigurer le bordel alors qu’en fin de compte le gain pour nous, en tant qu’entreprise, est ZERO.

C’est tjs pareil en info : d’un coté tu as les dév qui arretent pas d’inventer des trucs kikoolol qui servent pas forcément pour tout le monde et de l’autre coté tu as les admins qui pétent un cable pour que ca remarche avec les supers idées kikoolol des dév…

C’est dur le travail. Vivement la retraite. Demain d’autre generalites a l’emporte piece sur les fonctionaires, les patrons, les ouvriers en batiement et ceux qui doivent travailler parcequ’ils sont trop mechants.

Changer une appli qu’a aucun besoin de changer pour le plaisir de changer, c’est potentiellement bete, c’est tout autant du travail pour les devs que pour les admins mais ca a absolument rien a voir avec UTF8 et les benefices des chaine multibyte. Faut pas tout melanger.

bon ok j’ai dit une connerie enorme, je suis dans une periode en ce moment où je ne fais que ça (pas volontaire hein :stuck_out_tongue: qu’on se rassure )

vala, gloppy il est fort, moi pas. et l’UTF8 il parait que c’est bien :stuck_out_tongue:

Non mais j’ai pas dit qu’il fallait en mettre en toute les sauces, obligatoire sinon t’es trop nul. Surtout si c’est pas supporte par le framework que t’utilise en natif. Faut pas me faire dire ce que j’ai pas dit. Faut juste connaitre les tenants et les aboutissants pour prendre une decision informee. Parceque c’est clairement la direction prise par tout le monde pour le futur d’avoir des framework qui supporte UTF8 ou autre et quand on en conclue “sapu” ou “die UTF8” a l’emporte piece, ca me plait pas et je rale.

Comme dit l’article (tres bon) linke par LeBaronNoir, c’est clairement surprenant combien de gens concluent “je vais tout faire pour eviter UFT8 et autre, c’est des ennuis” quand vraiment, c’est pas si complique et toute personne dont c’est le metier devrait avoir un minium de connaissances sur le sujet, cf l’article en question (doit y avoir une trad en francais en plus comme de nombreux articles du monsieur Joel…).

Ha, ça y est, j’ai retrouvé la version française de l’article.

merci

vraiment (j’ai tout lu…)

Très intéressant ! Et on se rend compte qu’on peut lire des tas d’énormités (je pars du principe que cet article fait foi) sur UTF-8 et Unicode un peu partout, y compris lors de cours donnés par des « professionels »