document csv contenant caractères accentués

1
0
-1

Bonjour,

je cherche à charger le contenu d'un fichier csv dans une variable métier (vmParamsTrt).

Pour ce faire, je charge d'abord le fichier dans un document (listeParams), puis dans une tâche automatique, je crée une opération qui alimente la variable métier vmParamsTrt à partir du script suivant :

import com.company.test.ParamsTrt;

def docId = apiAccessor.getProcessAPI().getLastDocument(processInstanceId, "listeParams").getId();
byte[] docContenuByte = apiAccessor.getProcessAPI().getDocumentContent(docId.toString());

String docContenuString = new String(docContenuByte);
/*byte[] docCibleByte = docContenuString.getBytes("ISO-8859-1");*/
byte[] docCibleByte = docContenuString.getBytes("UTF-8");
String docCibleString = new String(docCibleByte);

String[] fichierLigne = docCibleString.split("\r\n");
/*def nblignes = paramsLigne.length;*/

def paramsListe = [];

fichierLigne.each{
paramsListe.add({ currentFichierLigne ->
def paramsLigne = new com.company.test.ParamsTrt()
String[] col = currentFichierLigne.split(";");
paramsLigne.par1= col[0]
paramsLigne.par2= col[1]
paramsLigne.par3= col[2]
paramsLigne.par4= col[3]
paramsLigne.par5= col[4]
return paramsLigne
}(it))
}
paramsListe.remove(0);
return paramsListe

Le problème est que l'une des valeurs contenue dans le fichier contient un caractère accentué (il s'agit du mot "Année").
Dans la variable Métier, je récupère " Ann�e".

J'ai essayé d'appliquer une conversion en UTF-8 avec l'instruction getBytes("UTF-8"), comme le montre le script ci-dessus, mais ça ne change rien.

J'ai essyé également getBytes("ISO-8859-1"), et là je récupère "Ann?e"

Une idée de comment je dois faire pour récupérer correctement les caractères accentués ?

D'avance, merci,

Thierry.

1 answer

1
0
-1

Hello,

Le probleme vient t-il de la lecture du CSV, ou de son exploitation par la suite ? Ca serait interressant ainsi de logger

Logger logger = Logger.getInfo("org;bonitasoft.scriptCSV");

logger.info("Ligne=["+currentFichierLigne+"]");

logger.info("Parameter=["+col[2+"]");

En effet, il se peut que le probleme soit dans l'écriture. Sinon, comment est stocké le fichier CSV ? Il est chargé depuis un formulaire avec un FileUpload? Normalement, il ne devrait pas avoir de surprise de ce coté la (le parametre -Ffile.encoding=UTF8 est bien présent sur la ligne de commande du serveur n'est ce pas?)

Cordialement

Comments

Submitted by brt6178_1422639 on Tue, 11/17/2020 - 16:10

Bonjour,

désolé de répondre tardivement, mais j'avais laissé tomber temporairement le sujet.

Mon fichier CSV n'était pas au format UTF8. En l'enregistrant à ce format, ça marche.J'ignorais qu'Excel proposait ce format lors de l'enregistrement en csv.

Merci quand même pour votre réponse.

Cordialement,

Thierry

Submitted by Pierre-yves Monnet on Tue, 11/17/2020 - 19:53

Tout s'explique...

Oui les méchanismes d'encodage sont ... surprenant. Pourquoi n'existe-il pas qu'une seule norme ??? C'est pour cela que Bonita a choisi UTF-8 qui est la plus standard.

En tout cas, bravo pour avoir trouvé l'origine !

Notifications