Encodage CSV à l'import

Bonjour,
J’utilise une action sur un objet pour faire un import CSV, et le passer à un adaptateur spécifique, par contre j’ai un problème avec les caractère spéciaux (accents) à l’import vers simplicité.

Sachant que mon csv est bien en UTF-8, existe t’il un moyen de forcer la lecture du fichier en utf-8 ?

Sinon j’ai vu qu’on peux paramétrer la JVM, ou puis-je accéder à ces paramètres svp ?
merci d’avance

Dans Simplicité tout fonctionne par défaut en UTF-8.

Votre fichier doit donc contenir autre chose que du UTF-8.

PS: On parle bien d’un déploiement Docker dans votre cas ?

Non c’est juste un import csv avec adapter spécifique, pour créer plusieurs objets métier voici le code de mon action :

public String importFullCsv(Action action) {
	    String lang = getGrant().getLang();
	    // Document field
	    ObjectField myDocField = action.getConfirmField(lang, "CsvInvoicesDoc");
	    DocumentDB doc = myDocField!=null ? myDocField.getDocument() : null;
	    
	    try{
	    byte[] data = doc.getBytes(true);
	    // Or for a document field:
	    // byte[] java = getField("myDocumentField").getDocument().getBytes(true);
	    Message res = new Integration().importADP(this.getGrant(), "InvEvtCSVAdapter", new ByteArrayInputStream(data), getName(), null);
	    
	    
	    	
	    }catch (Exception e){
			AppLog.info("Import CSV Error = " + e.getMessage(), getGrant());
	    }
	    	return "<pre>" + "Error" +  "</pre>";
}

Nous importons en permanence des fichiers entrants encodés en UTF-8 et je vous assure que ça marche parfaitement

Donc :

  1. soit votre fichier contient autre chose que de l’UTF-8 (c’est pas toujours facile à voir car ce que disent les éditeurs de texte est parfois trompeur notamment quand il y a un mélange entre plusieurs encodings dans le fichier) => envoyez le moi en message privé pour que je vérifie

  2. soit vous avez démarré Simplicité explicitement avec un autre encoding JVM que UTF-8 ce qui est une très mauvaise idée car Simplicité n’est pas fait pour fonctionner sur autre chose qu’une JVM en UTF-8

PS: L’encoding de la JVM est affiché dans le /health:
image

Oui je confirme, le probléme vient de mes excel, ça ne sauvegarde pas en utf-8 et apparament c’est un probléme commun.
Une derniére question, est ce possible de forcer l’import à l’encodage ANSI ? Sinon si une mauvaise idée je passe sur des outils pour convertir à l’utf-8

Sur Excel il y a une option pour “enregistrer sous” en CSV UTF-8:

PS:

Sinon il y a une classe utilitaire historique (et basique) pour faire des conversions d’encoding: EncodingTool (plus vraiment utilisé depuis la version 3.0)

Sinon il y a aussi la lib Apache commons “codecs”, cf. StringUtils (Apache Commons Codec 1.11 API) qui répond peut être aussi au besoin de conversion (je ne l’ai jamais utilisée)

Personnellement je convertit toujours les fichiers en UTF-8 à la source, avant de les faire traiter par Simplicité. Les histoires d’encoding sont une source inépuisables de problèmes frustrants.

Java sait surement convertir des encodings de base.
Par exemple, si votre fichier est de l’iso-8859-1 :

// ISO-8859-1
byte[] data = ... read file... 
// Java Unicode
String s = new String(data, "ISO-8859-1");
// UTF-8
byte[] utf8 = s.getBytes("UTF-8");

Par défaut Simplicité fait des new String(data, "UTF-8") quand il charge des fichiers textuels (comme CSV), donc ce sera plus simple si votre source est en en UTF-8.

Quoiqu’il en soit il faudra maitriser l’encoding de vos fichiers sources, ou alors ajouter un champ dans votre action pour demander l’encoding de la source à votre utilisateur.