Encodage fichier de sortie Applescript

titigrou

Membre expert
Club iGen
23 Décembre 2004
1 091
26
40
Lille
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
Bloc de code:
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
 
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:
Bloc de code:
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::
Bloc de code:
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
 
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!
 
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.

ouvrirtextedit-518c3e1.jpg
 
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?
 
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.
 
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?
 
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 :

Bloc de code:
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
 
  • J’aime
Réactions: baron