Bonjour,

Le 29/08/2018 à 23:59, Cédric Giraud a écrit :
La macro parse les lignes et les écrit à la suite dans un fichier .json
propre à chaque langue en créant la bonne indentation et le bon formatage
du langage.

le problème d'encodage vient de là :


open Fichier for output as #1
[...]
print #1, Resultat
close #1

Vous utilisez les primitives standard du LibO Basic pour écrire dans le fichier. De fait, vous n'avez pas accès à la méthode d'encodage des caractères.

Pour avoir la pleine maîtrise de cet aspect, je vous conseille d'utiliser l'API relative aux flux.

Dans ce cadre, vous ferez appel à deux services :
-- com.sun.star.ucb.SimpleFileAccess
qui fournit l'accès au fichier
-- com.sun.star.io.TextOutputStream
qui permet l'accès en écriture à un fichier texte (comme son nom l'indique)

Ce dernier service fournit une méthode setEncoding() qui vous permet de choisir l'encodage voulu. Les valeurs possibles figurent dans la page web https://www.iana.org/assignments/character-sets/character-sets.xhtml
(colonne Name)

-> Sachez cependant que UTF-8 est l'encodage par défaut proposé par TextOutputStream.

Par exemple, pour écrire un fichier texte encodé en UTF-8 via l'API flux en Basic, vous auriez un code comme celui-ci :

8< ----------------------------------------------------------------

Dim oSFA As Object
Dim oOutText As Object
Dim FichierURL As String

oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
FichierURL = ConvertToURL("C:\chemin\vers\MonFichier.txt")
oOutText = createUNOService("com.sun.star.io.TextOutputStream")
oOutText.setOutputStream(oSFA.openFileWrite(FichierURL))
'écrire (les délimiteurs de ligne doivent être spécifiés)
'[ici CRLF (Windows)]
oOutText.WriteString("Hello World" & Chr(13) & Chr(10))
oOutText.WriteString("Ligne 2" & Chr(13) & Chr(10))
'vider les tampons et fermer
oOutText.flush
oOutText.closeOutput()

--------------------------------------------------------------- >8


Bien cordialement,
--
Jean-Francois Nifenecker, Bordeaux


--
Envoyez un mail à [email protected] pour vous désinscrire
Les archives de la liste sont disponibles à 
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Répondre à