Convertir un fichier en ANSI
Bonjour,
Dans le cadre d'une application métier dont les scripts sont basés sur du Jython, je cherche à forcer l'encodage des fichiers importés en ANSI.
Les fichiers soumis par les utilisateurs, par exemple au format UTF-8, ne passent pas... Lorsqu'avec Notepad++ je force l'encodage du fichier en ANSI (encodage / convertir en ANSI) alors le même fichier est importé et traité correctement par le script Jython.
J'ai effectué pas mal de recherches ("python file encoding", "how to encode to ansi" etc...) cependant la solution simple ne semble pas exister. J'ai tenté avec les fonctions encode et decode sans succès. A priori il s'agirait de connaître l'encodage en entrée mais la tâche me semble difficile.
Je suis preneur de toute aide, conseil ou lien! Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import shutil
def is_int_long_float_complex(string):
try:
int(string)
return True
except ValueError: pass
try:
float(string)
return True
except ValueError: pass
try:
complex(string)
return True
except ValueError: pass
try:
long(string)
return True
except ValueError: pass
return False
locname = fdmContext["LOCNAME"]
if locname[:3] == "IG_" or locname[:6] == "GL_FRA":
infilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"]
outfilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"] + ".modif"
copyfilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"] + ".bak"
shutil.copyfile(infilename, copyfilename)
infile = open(copyfilename, "r")
outfile = open(outfilename, "w")
for line in infile:
line = line.strip()
if locname[:6] == "IG_FRA":
column = line.split(';',9)
outfile.write(column[0] + ";" + "IG" + column[1] + ";" + column[2] + ";" + column[3] + ";None;" + column[5] + ";" + column[6] + ";" + column[7] + "\n")
if column[5] != '':
outfile.write(column[0] + ";" + "IG" + column[1] + ";" + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[5] + ";" + column[6] + ";" + column[8] + "\n")
elif locname[:3] == "IG_":
column = line.split(";",9)
if is_int_long_float_complex(line[7]) and is_int_long_float_complex(line[8]):
outfile.write(column[0] + ";" + column[1] + ";" + column[2] + ";" + column[3] + ";None;" + column[5] + ";" + column[6] + ";" + column[7] + "\n")
if column[8] != column[7]:
outfile.write(column[0] + ";" + column[1] + ";" + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[5] + ";" + column[6] + ";" + column[8] + "\n")
else:
column = line.split(";",7)
outfile.write(column[0] + ";" + "GL" + column[1] + ";" + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[5] + ";" +column[6] + "\n")
infile.close()
outfile.close()
shutil.copyfile(outfilename, infilename) |