# AppleScript/Terminal : problème d'accents



## PA5CAL (7 Septembre 2007)

Bonjour &#224; tous 

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

Dans le principe, je r&#233;cup&#232;re le chemin d'une commande dans une cha&#238;ne, que j'ex&#233;cute ensuite dans le Terminal avec un "_do script_ ...".

Malheureusement, dans le cas o&#249; le chemin de la commande contient des voyelles accentu&#233;es, ces voyelles perdent leur accent au moment de l'ex&#233;cution dans le Terminal, et le commande n'est pas trouv&#233;e (erreur "_No such file or directory_").

Par exemple, "_/MesApplis/Syst*&#232;*me/test_" se transforme en "_/MesApplis/Syst*e*me/test_".

Il semble que dans ce cas, seul "_/MesApplis/Syst*\303\250*me/test0_" soit accept&#233;.

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


Merci d'avance pour vos r&#233;ponses.


----------



## Anonyme (7 Septembre 2007)

PA5CAL a dit:


> 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 ?

```
quoted form of "/MesApplis/Système/test"
```


----------



## PA5CAL (7 Septembre 2007)

DocEvil a dit:


> As-tu essay&#233; l'expression suivante ?
> 
> ```
> quoted form of "/MesApplis/Syst&#232;me/test"
> ```


Malheureusement oui. C'est la premi&#232;re chose que j'ai faite. &#199;a me permet d'avoir un chemin qui ne provoque pas d'erreur d'interpr&#233;tation pour les espaces.

Mais mon probl&#232;me, c'est que les voyelles accentu&#233;es, qui sont effectivement transmises au Terminal, sont transform&#233;es par ce dernier. Pour preuve, en reprenant mon exemple, on trouve dans la fen&#234;tre :
	
	



```
Last login: Fri Sep  7 17:35:51 on ttyp2
'/MesApplis/Syst[COLOR="DarkRed"][B]&#232;[/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&#233;es et les caract&#232;res sp&#233;ciaux vers les valeurs octales des codes UTF8 correspondants.


----------



## zacromatafalgar (7 Septembre 2007)

Salut,

J'ai bricol&#233; un script qui remplace les caract&#232;res par les valeurs que tu as fourni dans ton premier post mais il faut le compl&#233;ter car je ne connais pas les valeurs&#8230;

Je ne sais pas s'il te conviendra mais bon&#8230;  


```
property badChar : {"&#232;", "&#233;", "&#224;"}
property charOk : {"\\303\\250", "\\303\\251", "\\303\\240"}
property stringInProgress : missing value

on run
	set theString to "/MesApplis/Syst&#232;m&#233;/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&#232;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&#233; le d&#233;but car je ne sais pas comment tu veux transmettre les chemins &#224; ce bout de script


----------



## PA5CAL (7 Septembre 2007)

La difficult&#233; est qu'il semble que:
- la lettre "&#232;" est en fait compos&#233;e d'un "e" suivi d'un caract&#232;re "accent grave" dans la cha&#238;ne AppleScript,
- Terminal attend le code UTF-8 correspondant "\303\250" (et non pas la suite de caract&#232;res "\","3","0","3","\","2","5","0" qu'il ne sait pas directement interpr&#233;ter).

Conna&#238;triez-vous une fonction ou une astuce de programmation pour faire la transcription ?



_EDIT: @zacromatafalgar : j'ai lu ton code apr&#232;s avoir post&#233;. Merci de t'&#234;tre pench&#233; sur mon probl&#232;me. Mais malheureusement, comme je viens juste de l'&#233;crire, l'inscription des 8 caract&#232;res "\303\250" ne remplace pas les deux octets \303 et \250 du code UTF-8._


----------



## Captain_X (7 Septembre 2007)

en terminal les accents n'existent pas... les accents c'est la plaie, faut les bannir


----------



## zacromatafalgar (7 Septembre 2007)

PA5CAL a dit:


> La difficult&#233; est qu'il semble que:
> - la lettre "&#232;" est en fait compos&#233;e d'un "e" suivi d'un caract&#232;re "accent grave" dans la cha&#238;ne AppleScript,
> - Terminal attend le code UTF-8 correspondant "\303\250" (et non pas la suite de caract&#232;res "\","3","0","3","\","2","5","0" qu'il ne sait pas directement interpr&#233;ter).
> 
> Conna&#238;triez-vous une fonction ou une astuce de programmation pour faire la transcription ?



Justement ce que l'on r&#233;cup&#232;re dans la variable stringOk est au format string et non pas sous forme de liste&#8230; C'est bien ce qu'il faut, non ?

Edit : Je viens de lire l'&#233;dition et j'ai du mal &#224; saisir ce qu'il faudrait donc transmettre au terminal


----------



## PA5CAL (7 Septembre 2007)

(désolé, nos posts se croisent, je ne tape pas assez vite :rateau: )



zacromatafalgar a dit:


> 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 ?


Oui. Ça règle peut-être déjà une partie du problème. Je vais vérifier ce que ça donne.


----------



## PA5CAL (7 Septembre 2007)

Captain_X a dit:


> 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 (   )


----------



## zacromatafalgar (7 Septembre 2007)

PA5CAL a dit:


> - repasser sous MS DOS (   )



C'est l'heure des gouttes me semble-t-il :hosto:


----------



## PA5CAL (7 Septembre 2007)

@ 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.


----------



## Captain_X (7 Septembre 2007)

la programmation, Terminal, font tous appels &#224; la langue maternel de leur g&#233;niteur : l'anglais ... donc pas d'accent... si tu veux utiliser Terminal, banni toute forme d'accent


----------



## PA5CAL (8 Septembre 2007)

Captain_X a dit:


> 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&#232;s bien g&#233;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&#232;res pr&#233;vus par la langue Fran&#231;aise, ainsi que certains caract&#232;res sp&#233;ciaux courants.

Le probl&#232;me particulier que je rencontre ici est de pouvoir transmettre &#224; une commande sous Terminal des noms de fichiers &#224; partie d'AppleScript, sans pour autant monter une v&#233;ritable usine &#224; gaz.



_EDIT: Mais selon toute vraisemblance, les d&#233;veloppeurs d'Apple ont d&#251; oublier quelque chose au niveau de la communication entre ces deux logiciels ..._


----------



## Captain_X (8 Septembre 2007)

libre &#224; toi de te faire chier avec pas grand chose alors.


----------



## PA5CAL (8 Septembre 2007)

Captain_X a dit:


> libre &#224; toi de te faire *chier* avec *pas grand chose* alors.


Eh bien merci :mouais: !

Ce n'&#233;tait pas peine d'en rajouter. C'est ta troisi&#232;me intervention et j'avais d&#233;j&#224; bien compris le message.

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

Alors si tu n'as pas de solution, d'explication ou d'indice s&#233;rieux &#224; proposer, s'il te plait passe ton chemin. Je n'ai vraiment pas besoin d'un troll d&#233;faitiste sur ce fil.


----------



## ceslinstinct (8 Septembre 2007)

PA5CAL a dit:


> Pas d'accord.
> 
> Terminal et les outils de programmation de Mac OS X savent tr&#232;s bien g&#233;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&#232;res pr&#233;vus par la langue Fran&#231;aise, ainsi que certains caract&#232;res sp&#233;ciaux courants.
> 
> ...




Salut

Avec Applescript et un do shell script &#231;a marche.

Suite a une question un MacUser m'avais fait un script et m'avais dit &#231;a:

*Il ne fonctionnait pas avec les noms ayant des caract&#232;res accentu&#233;s ou un espace*

En code terminal je conna&#238;t rien, comme il &#224; post&#233; le script et modifi&#233;e dans l'heure alors je peut pas savoir la diff&#233;rence.

Ils parle du m&#234;me probl&#232;me ici: 
http://forums.macg.co/vbulletin/showthread.php?p=4373939

PS: Si c'est pas la  r&#233;ponse que tu attendais alors appelle moi Bus.

Comme &#231;a tu pourras dire je ne prend pas les Troll & Bus

@+


----------



## PA5CAL (8 Septembre 2007)

Merci ceslinstinct pour cette indication .

L'utilisation des keystrokes comme moyen de communication entre AppleScript et Terminal semble &#234;tre effectivement une solution, m&#234;me si &#231;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&#231;on assez acceptable.

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


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

- La premi&#232;re consiste &#224; re-param&#233;trer Terminal pour qu'il accepte une fois pour toute les voyelles accentu&#233;es envoy&#233;es par AppleScript. Le moyen le plus rapide a &#233;t&#233; de re-param&#233;trer le shell ("_/bin/sh_" ou "_/bin/bash_") dans Terminal>Pr&#233;f&#233;rences.

- La seconde consiste &#224; passer tous les param&#232;tres du travail &#224; effectuer &#224; un petit programme situ&#233; &#224; un endroit effectivement accessible par Terminal dans sa configuration par d&#233;faut, par le biais d'un fichier temporaire (situ&#233; dans _/tmp/_). Cette petite sur-couche (quelques lignes en C) permet une ex&#233;cution correcte dans tous mes cas de figure, sans re-param&#233;trer ni Terminal ni le "bash" par d&#233;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&#232;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&#233;sultat pas toujours exploitable quand on doit pouvoir analyser les chemins trait&#233;s sous forme de caract&#232;res ASCII. En effet, il peut y avoir une confusion entre un caract&#232;re accentu&#233; (que cette fonction transforme en un caract&#232;re non accentu&#233; suivi du caract&#232;re de l'accent) et la succession du caract&#232;re non accentu&#233; et de l'accent seul. De ce fait, il est pr&#233;f&#233;rable de pratiquer une telle analyse directement &#224; partir de l'alias sous forme de texte.


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


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


----------

