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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)