AppleScript/Terminal : problème d'accents

PA5CAL

Membre expert
Club iGen
21 Juillet 2005
9 251
597
Île-de-France
Bonjour à tous :coucou:

Je tente actuellement de modifier un script AppleScript qui m'a jusque maintenant rendu de bon et loyaux service... jusqu'à ce qu'il tombe sur des noms de dossier comportant des voyelles accentuées !

Dans le principe, je récupère le chemin d'une commande dans une chaîne, que j'exécute ensuite dans le Terminal avec un "do script ...".

Malheureusement, dans le cas où le chemin de la commande contient des voyelles accentuées, ces voyelles perdent leur accent au moment de l'exécution dans le Terminal, et le commande n'est pas trouvée (erreur "No such file or directory").

Par exemple, "/MesApplis/Système/test" se transforme en "/MesApplis/Systeme/test".

Il semble que dans ce cas, seul "/MesApplis/Syst\303\250me/test0" soit accepté.

J'aurais donc voulu savoir s'il y avait un moyen (simple ?) sous AppleScript de convertir les voyelles accentuées en caractères équivalents tels que requis par le Terminal ("\303\250" pour "è", "\303\251" pour "é", "\303\240" pour "à", etc.).


Merci d'avance pour vos réponses.
 
Malheureusement, dans le cas où le chemin de la commande contient des voyelles accentuées, ces voyelles perdent leur accent au moment de l'exécution dans le Terminal, et le commande n'est pas trouvée (erreur "No such file or directory").
As-tu essayé l'expression suivante ?
Bloc de code:
quoted form of "/MesApplis/Système/test"
 
As-tu essayé l'expression suivante ?
Bloc de code:
quoted form of "/MesApplis/Système/test"
Malheureusement oui. C'est la première chose que j'ai faite. Ça me permet d'avoir un chemin qui ne provoque pas d'erreur d'interprétation pour les espaces.

Mais mon problème, c'est que les voyelles accentuées, qui sont effectivement transmises au Terminal, sont transformées par ce dernier. Pour preuve, en reprenant mon exemple, on trouve dans la fenêtre :
Bloc de code:
Last login: Fri Sep  7 17:35:51 on ttyp2
'/MesApplis/Syst[COLOR="DarkRed"][B]è[/B][/COLOR]me/test'
Welcome to Darwin!
$ '/MesApplis/Syst[COLOR="DarkRed"][B]e[/B][/COLOR]me/test'
-bash: /MesApplis/Syst[COLOR="DarkRed"][B]e[/B][/COLOR]me/test: No such file or directory
$

Je cherche donc un moyen de transcrire les voyelles accentuées et les caractères spéciaux vers les valeurs octales des codes UTF8 correspondants.
 
Salut,

J'ai bricolé un script qui remplace les caractères par les valeurs que tu as fourni dans ton premier post mais il faut le compléter car je ne connais pas les valeurs…

Je ne sais pas s'il te conviendra mais bon… ;)

Bloc de code:
property badChar : {"è", "é", "à"}
property charOk : {"\\303\\250", "\\303\\251", "\\303\\240"}
property stringInProgress : missing value

on run
	set theString to "/MesApplis/Systèmé/test"
	set stringOk to processString(theString)
	display dialog " stringOk : " & stringOk
end run

on processString(theString)
	set stringInProgress to theString
	repeat with x from 1 to 3 --remplacer le 3 par le nombre de caractères dans badChar
		set thisChar to item x of badChar
		set stringInProgress to findReplace(stringInProgress, thisChar, (item x of charOk))
	end repeat
	return stringInProgress
end processString

on findReplace(thePath, toFind, replaceBy)
	set thePath to thePath as string
	set AppleScript's text item delimiters to (toFind as string)
	set zeItems to text items of thePath
	set AppleScript's text item delimiters to replaceBy
	set thePath to (zeItems as text)
	set AppleScript's text item delimiters to ""
	return thePath
end findReplace

Edit : je n'ai pas terminé le début car je ne sais pas comment tu veux transmettre les chemins à ce bout de script
 
La difficulté est qu'il semble que:
- la lettre "è" est en fait composée d'un "e" suivi d'un caractère "accent grave" dans la chaîne AppleScript,
- Terminal attend le code UTF-8 correspondant "\303\250" (et non pas la suite de caractères "\","3","0","3","\","2","5","0" qu'il ne sait pas directement interpréter).

Connaîtriez-vous une fonction ou une astuce de programmation pour faire la transcription ?



EDIT: @zacromatafalgar : j'ai lu ton code après avoir posté. Merci de t'être penché sur mon problème. Mais malheureusement, comme je viens juste de l'écrire, l'inscription des 8 caractères "\303\250" ne remplace pas les deux octets \303 et \250 du code UTF-8.
 
La difficulté est qu'il semble que:
- la lettre "è" est en fait composée d'un "e" suivi d'un caractère "accent grave" dans la chaîne AppleScript,
- Terminal attend le code UTF-8 correspondant "\303\250" (et non pas la suite de caractères "\","3","0","3","\","2","5","0" qu'il ne sait pas directement interpréter).

Connaîtriez-vous une fonction ou une astuce de programmation pour faire la transcription ?

Justement ce que l'on récupère dans la variable stringOk est au format string et non pas sous forme de liste… C'est bien ce qu'il faut, non ?

Edit : Je viens de lire l'édition et j'ai du mal à saisir ce qu'il faudrait donc transmettre au terminal
 
en terminal les accents n'existent pas... les accents c'est la plaie, faut les bannir
Mes noms de dossiers et de fichiers sont écrits en bon Français. J'ai donc des voyelles accentuées qui traînent par ci par là...

Je cherche une autre alternative à :
- ne plus écrire en Français
- ne plus me servir du Terminal
- ne plus me servir d'AppleScript
- repasser sous MS DOS ( ;) :D )
 
@ zacromatafalgar :
Eh bien non, ça ne colle pas. Mon "è" (qui provient d'un "quoted form of POSIX path of ...") est toujours constitué d'un caractère "e" suivi d'un caractère "accent grave"...

Dommage. J'espérais pouvoir tomber sur le caractère ASCII "è", ça aurait grandement simplifié les choses.
 
si tu veux utiliser Terminal, banni toute forme d'accent
Pas d'accord.

Terminal et les outils de programmation de Mac OS X savent très bien gérer les accents (tous les fichiers et dossiers sont accessibles, quelque soit la composition des noms) et il n'y a aucune raison de s'en passer. D'autre part, je ne peux pas m'en passer, car les noms de fichiers que je traite utilisent tous les caractères prévus par la langue Française, ainsi que certains caractères spéciaux courants.

Le problème particulier que je rencontre ici est de pouvoir transmettre à une commande sous Terminal des noms de fichiers à partie d'AppleScript, sans pour autant monter une véritable usine à gaz.



EDIT: Mais selon toute vraisemblance, les développeurs d'Apple ont dû oublier quelque chose au niveau de la communication entre ces deux logiciels :(...
 
libre à toi de te faire chier avec pas grand chose alors.
Eh bien merci :mouais: !

Ce n'était pas peine d'en rajouter. C'est ta troisième intervention et j'avais déjà bien compris le message.

Mais je pense, contrairement à toi, que le scriptage du Terminal dans un environnement en langue Française est un sujet très sérieux, et qu'il mérite qu'on se penche dessus justement parce que:
1- il correspond à un besoin bien réel (même si les motivations t'échappent),
2- il y subsiste des problèmes auxquels personne (mais je me trompe peut-être) ne semble avoir répondu.
Or on n'est ici que pour trouver des réponses et pour les faire partager.

Alors si tu n'as pas de solution, d'explication ou d'indice sérieux à proposer, s'il te plait passe ton chemin. Je n'ai vraiment pas besoin d'un troll défaitiste sur ce fil.
 
Pas d'accord.

Terminal et les outils de programmation de Mac OS X savent très bien gérer les accents (tous les fichiers et dossiers sont accessibles, quelque soit la composition des noms) et il n'y a aucune raison de s'en passer. D'autre part, je ne peux pas m'en passer, car les noms de fichiers que je traite utilisent tous les caractères prévus par la langue Française, ainsi que certains caractères spéciaux courants.

Le problème particulier que je rencontre ici est de pouvoir transmettre à une commande sous Terminal des noms de fichiers à partie d'AppleScript, sans pour autant monter une véritable usine à gaz.



EDIT: Mais selon toute vraisemblance, les développeurs d'Apple ont dû oublier quelque chose au niveau de la communication entre ces deux logiciels :(...


Salut

Avec Applescript et un do shell script ça marche.

Suite a une question un MacUser m'avais fait un script et m'avais dit ça:

Il ne fonctionnait pas avec les noms ayant des caractères accentués ou un espace

En code terminal je connaît rien, comme il à posté le script et modifiée dans l'heure alors je peut pas savoir la différence.

Ils parle du même problème ici:
http://forums.macg.co/vbulletin/showthread.php?p=4373939

PS: Si c'est pas la réponse que tu attendais alors appelle moi Bus.

Comme ça tu pourras dire je ne prend pas les Troll & Bus

@+
 
Merci ceslinstinct pour cette indication ;).

L'utilisation des keystrokes comme moyen de communication entre AppleScript et Terminal semble être effectivement une solution, même si ça ne m'enchante pas trop.


Dans l'intervalle, j'ai enfin pu trouver une solution et terminer ce que je faisais d'une façon assez acceptable.

Mon problème tenait principalement au fait que, par défaut, Terminal utilise "bash" et ce dernier n'interprète pas correctement les voyelles accentuées et autres caractères spéciaux qu'on lui passe autrement que par l'entrée standard.


Pour info, j'ai pu régler mon problème de deux manières différentes (et somme toute assez simples, ce qui était mon objectif):

- La première consiste à re-paramétrer Terminal pour qu'il accepte une fois pour toute les voyelles accentuées envoyées par AppleScript. Le moyen le plus rapide a été de re-paramétrer le shell ("/bin/sh" ou "/bin/bash") dans Terminal>Préférences.

- La seconde consiste à passer tous les paramètres du travail à effectuer à un petit programme situé à un endroit effectivement accessible par Terminal dans sa configuration par défaut, par le biais d'un fichier temporaire (situé dans /tmp/). Cette petite sur-couche (quelques lignes en C) permet une exécution correcte dans tous mes cas de figure, sans re-paramétrer ni Terminal ni le "bash" par défaut.


D'autre part, pour la conversion de Mac OS Roman en UTF-8, j'ai choisi d'utiliser la commande native2ascii dans la seconde solution, et une liste de conversion dans la première. Cela ne me sert pas pour le passage des noms de fichiers au Terminal, mais pour d'autres informations que je traite dans AppleScript. Une petite recherche de "class utf8" sur Google donne d'autres solutions possibles.

A noter au passage un soucis au niveau de la fonction "POSIX path of" d'AppleScript, qui donne un résultat pas toujours exploitable quand on doit pouvoir analyser les chemins traités sous forme de caractères ASCII. En effet, il peut y avoir une confusion entre un caractère accentué (que cette fonction transforme en un caractère non accentué suivi du caractère de l'accent) et la succession du caractère non accentué et de l'accent seul. De ce fait, il est préférable de pratiquer une telle analyse directement à partir de l'alias sous forme de texte.


En conclusion :
- les problèmes d'accents sous Mac OS X ne sont pas insurmontables (n'en déplaise à certains)
- il faut se méfier de "bash" et de certaines facilités d'AppleScript (mais ça a déjà été dit plusieurs fois sur nos forums) et s'assurer qu'on ne les utilise pas inconsidérément pour des travaux importants (à titre professionnel par exemple) ou dangereux (effacement de fichiers, etc.).


Bon, s'il n'y a plus rien d'autre à dire sur le sujet, on peut fermer je crois...