Problème affichage script bash (charset)

Fermé
Lineo - 6 août 2012 à 16:03
 Lineo - 14 août 2012 à 17:05
Bonjour,

Je suis entrain de faire sur un serveur linux un script bash qui affiche à l'écran différentes choses, en français avec les accents et tout.

Mon problème est que de nombreux utilisateurs vont se connecter en ssh sur ce serveur et exécuter ce script, et selon que leur terminal soit configuré en ISO,ANSI,UTF-8,... le résultat ne sera pas le même notamment pour l'affichage des accents !

Si j'encode mon script en ISO, les utilisateurs UTF8 ne verront pas les accents, et si je l'encode en UTF8, ceux en ISO ne les verront pas. Et des caractères "bizarres" apparaissent.

Comment pourrais-je remédier à ce problème et toujours faire le bon affichage en fonction du terminal?

Merci d'avance
A voir également:

14 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
6 août 2012 à 20:23
Essaye de filtrer la sortie de ton script (stdout et stderr) avec iconv, après avoir déterminé l'encodage du terminal courant.
man 1 iconv
0
Merci, c'est justement ce que je suis entrain de faire
Le problème c'est que du coup ça ressemble plutôt à du bricolage,
et je me demandais s'il n'y avait pas une solution plus propre voir "officielle" ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
7 août 2012 à 08:29
Salut,

Et en s'attaquant au problème à la base ?
Côté utilisateur avec luit ?

https://www.nozav.org/archives/blog//post/2009/09/03/Probl%c3%a8me-d-encodage-dans-des-session-SSH
0
Salut,
Merci,
Hélas, je ne peux pas toucher à la configuration coté utilisateur :-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pour l'instant je mets en iso-8859-15 par défaut , et je regarde d'abord dans $LC_ALL, puis dans $LANG (si LC_ALL vide) s'il y a "utf-8"/i , et là je convertis en UTF-8

Mais je n'ai pas l'impression de faire quelque chose de bien
N'y-a t-il pas une commande qui nous retourne le bon encodage à utiliser ?
0
N'est-il pas possible d'"émuler" un envoi d'une lettre accentuée par le terminal ?

Il suffirait alors de regarder en quoi elle est encodée et le tour serait joué, sans aucun risque de se tromper !!
0
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 avril 2025 5 630
8 août 2012 à 16:40
hello
comme ça ?
$ echo éàèçüäö | file -
/dev/stdin: UTF-8 Unicode text
0
Oui mais il faudrait faire ça comme si le echo avait été tapé au clavier dans le terminal de l'utilisateur

Là tu me proposes de faires un echo dans le script, si je fais ça, ce sera en UTF8 si mon script est encodé en utf8 par mon éditeur de texte, et en ISO-X s'il est encodé en ISO-X.
Mais ce n'est pas du tout l'encodage du terminal de l'utilisateur.
0
Peut être avez vous au moins une piste à me donner pour que j'y arrive ?

Merci d'avance.
Désolé d'insister peut-être un peu trop :-)
0
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 avril 2025 5 630
9 août 2012 à 10:53
tester l'environnement comme au post #6 me semble une bonne méthode.
sinon pour simuler une touche clavier, il y a xdotool : http://www.tux-planet.fr/xdotool-simulation-du-clavier-et-de-la-souris-sous-linux/
0
Merci,
Hélas je doute que ça fonctionne, ça va simuler des touches sur le serveur, et pas sur les clients.

Il me faudrait un équivalent à
echo "Veuillez saisir un é :"
#L'utilisateur distant saisit 'é' et valide
read var


Mais sans que l'utilisateur ait à saisir ce é :]

Ou avec une autre méthode !
Le but est de connaitre l'encodage effectif utilisé par le terminal de l'utilisateur.
$LANG et $LC_ALL ne reflètent pas forcément la réalité, surtout dans mon cas.

Pour rappel :
L'utilisateur se connecte en ssh (terminal linux distribution X, putty,... ) sur mon serveur et lance le script.
Je peux faire des modifs sur le serveur et dans le script mais je n'ai pas de contrôle sur les postes des utilisateurs.
0
Utilisateur anonyme
13 août 2012 à 12:22
salut,

et en cherchant du côté de la configuration du daemon ssh (sur le serveur, donc) : commenter AcceptEnv dans /etc/ssh/sshd_config ?
0
Salut,
j'avais regardé par là aussi, mais AcceptEnv ou pas le problème reste le même, ça peut même être pire car si le système à un encodage par défaut($LANG) différent du terminal de l'utilisateur, celui ci verra tout dans le mauvais charset avec les conséquences que l'on connait sur les accents :(

Avec gnome-terminal par exemple, il est facile de changer l'encodage des caractères, et là le terminal est indépendant de AcceptEnv, $LANG, $LC_ALL.
En général ces variables donnent juste une valeur par défaut de départ, qui peut être prise en compte ou pas, et changer par la suite, surtout lors de multiples ssh sur des serveurs différents, ou après un su -, ces variables sont souvent susceptibles de changer.
Donc dans mon cas d'utilisation, elles ne sont pas fiables du tout
0
Irrésoluble ?
0

Discussions similaires