# Encodage fichier de sortie Applescript



## titigrou (5 Février 2017)

Hello,

J'ai un petit programme qui, pour résumer, prend un fichier d'entrée FICIN, traite ce fichier, et écrit un fichier de sortie FICOUT.
La portion de script qui écrit est la suivante

```
set thePath to "/Users/Antoine/Desktop/Ficoutput03.txt"
try
    set openfile to open for access thePath with write permission
    set eof of openfile to 0 -- efface le contenu du fichier s'il le fichier contient déjà du texte
    write Contenu_Fichier_Out to openfile as «class utf8»
    close access openfile
on error
    try
        close access thePath
    end try
end try
```

Sauf que le problème, c'est que le fichier Ficoutput03 est destiné à être lu dans excel après. Et j'ai un problème avec les accents dans Excel.
Vous avez une idée de comment je peux optimiser ça pour pas me retrouver avec des caractères bizarres?

Merci d'avance pour votre aide!

Antoine


----------



## JacqR (5 Février 2017)

Bonjour,

Cela dépend de l'encodage du fichier *FICIN* et selon la commande qui lit le fichier.

Si c'est la commande AppleScript 'read' et que l'encodage du fichier *FICIN* est en UTF8:

Il suffit de spécifier UTF8 avec la commande read, exemple:

```
set Contenu_Fichier_Out to read "/chemin/Du/Fichier/FICIN.txt" as «class utf8»
-- traite le texte dans Contenu_Fichier_Out
-- écriture dans Ficoutput03.txt
write Contenu_Fichier_Out to openfile as «class utf8»
```

•••••
Aussi, si l'encodage du fichier *FICIN* est en UTF8, on peut lire le fichier sans spécifier l'encodage et écrire dans un fichier sans spécifier l'encodage, exemple::

```
set Contenu_Fichier_Out to read "/chemin/Du/Fichier/FICIN.txt"
-- traite le texte dans la variable Contenu_Fichier_Out
-- écriture dans Ficoutput03.txt
write Contenu_Fichier_Out to openfile
```


----------



## titigrou (5 Février 2017)

Bah en fait mon Ficin est généré par une macro Excel. 
J'ai regardé son encodage avec la commande file -I et j'ai ça en réponse


> text/plain; charset=unknown-8bit


Du coup je pars mal dès le début je crois!


----------



## JacqR (5 Février 2017)

Pour savoir l'encodage sur un fichier dont l'encodage est inconnu :

Ouvre le fichier *Ficin* avec "TextEdit" par le menu "*Ouvrir...*" en sélectionnant un encodage spécifique (pas "Automatique") jusqu'à temps que les caractères s'affichent correctement.


----------



## titigrou (5 Février 2017)

Quand je prends Mac Os Roman  Occidental il s'ouvre (chose que il ne fait pas quand je prends UTF 8).
Du coup il faut que j'écrive mon FICOUT en Mac Os Roman aussi j'imagine?


----------



## JacqR (5 Février 2017)

Oui, la commande write écrit le texte dans un fichier en Mac Roman par défaut, il suffit de ne pas spécifier l'encodage, donc supprime 'as «class utf8»' dans le script.


----------



## titigrou (5 Février 2017)

Bah justement le problème c'est que quand je ne spécifie pas class utf8, quand je l'ouvre dans textedit, pas de problèmes, mais quand je l'ouvre avec Excel 2011, j'ai des caractères bizarres!
Avec un file -I j'ai encore 
text/plain; charset=unknown-8bit
Le problème viendrait de excel 2011?


----------



## JacqR (6 Février 2017)

J'ai testé sur *Excel Version 15.30* (Office 2016), il lit le fichier en "*ISO latin 1*" correctement, pas les fichiers en *Mac Roman* ou en *UTF8*.
Pour Excel 2011:
je ne sais pas, si cela ne fonctionne pas, essaie ceci:
À partir d'un fichier TextEdit, sauvegarde le document avec différent encodages, ouvre les fichiers avec Excel pour savoir si les caractères s'affichent correctement.​

Donc, ce script fonctionne sur ma machine :


```
set thePath to "/Users/Antoine/Desktop/Ficoutput03.txt"
try
    set tempPath to thePath & "--temp_xyz" -- fichier temporaire
    set openfile to open for access tempPath with write permission
    set eof of openfile to 0 -- efface le contenu du fichier s'il le fichier contient déjà du texte
    write Contenu_Fichier_Out to openfile
    close access openfile
    -- conversion d'un fichier en Mac Roman (mais inconnu par les autres applications) en un fichier encodé en iso latin 1 (cet encodage sera connu par les autres applications)
    do shell script "iconv -t CSISOLATIN1 -f MACROMAN " & (quoted form of tempPath) & " > " & (quoted form of thePath) & " && rm " & quoted form of tempPath -- à la fin on supprime le fichier temporaire
on error
    try
        close access tempPath
    end try
end try
```

Avec "*file -I Ficoutput03.txt*" j'obtient -->  text/plain; charset=iso-8859-1


----------



## titigrou (6 Février 2017)

Hum! Ca marche!
Merci infiniment!


----------

