bon jour à tous
je me suis fait un shell qui me transforme certains caractères d'un fichier en d'autres caractères
par exemple "É" en "E" , ce programme fonctionne bien ! tant que les caractères sont codés sur un seul caractère
le résultat du traitement va dans tmp.txt
un extrait du code
# shell sup_accent : prend le fichier en entrée et met le résultat dans tmp.txt
# par une succession de "tr"
tr $'\xc0'$'\xc1'$'\xc2'$'\xc3'$'\xc4'$'\xc5'$'\xc6' AAAAAAA # transforme ÀÁÂÃÄÅÆ en A
tr $'\xc8'$'\xc9'$'\xca'$'\xcb' EEEE # transforme ÈÉÊË en E
# etc
mais pour effectuer un test j'ai voulu faire la même chose "manuellement"
- demander un caractère
- écrire un caractère dans un fichier
- traiter ce fichier
et là j'ai eu un problème car voilà ce que j'ai fait et ça ne fonctionne pas ( comme je l'aurais souhaité)
echo "donner un caractère : " ; read car # je réponds par exemple É ( Alt Gr Shift é )
echo "$car" > tmp1.txt
./sup_accent "tmp1.txt" # appel du shell sup_accent le résultat va dans tmp.txt
pourquoi ça ne fonctionne pas :
si je regarde le source tmp1.txt je trouve C3 89 0A
à la transformation je me retrouve avec 41 89 0A (C3 transformé en A , 89 non transformé)
le résultat attendu était bien sur "E" 45 0A (code de E)
évidemment après analyse je vois pourquoi ça ne marche pas
la cause :
le shell ne traite pas correctement le fichier source si des caractères sont codés sur deux octets
pour l'instant sup_accent fonctionne car j'ai vérifié que les fichiers sources sont bien codés sur un seul caractère , mais sait-on jamais .... ( ce sont des fichiers récupérés sur internet )
le problème est apparu quand j'ai voulu effectuer des tests plus poussés par saisie
peut-être y a-t-il une solution assez simple ?