Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Accents dans des nom de fichiers

2 réponses
Avatar
Rémi Moyen
Bonjour,

Je suis en train de copier un tas de fichiers entre deux machines, et
j'ai un problème avec des noms de fichiers qui contiennent des accents.
Je pense qu'au moins une partie du problème vient du fait que je ne sais
pas vraiment quel encodage utilise la machine source, ni dans quel
encodage les fichiers ont été crées (ils ont été copiés depuis au moins
une autre machine et je n'en sais pas vraiment plus...).

La machine "destination" est une Debian/testing fraichement installée,
entièrement en UTF-8 (je pense). LANG vaut en_GB.UTF-8. Je peux y créer
des fichiers avec 'é' dans le nom sans problème. ls me montre bien
l'accent dans le nom du fichier. Tout va bien.

Quand je me connecte sur la machine "source" (par ssh), LANG vaut
fr_FR@euro. Un ls sur un fichier à problème m'affiche, par exemple,
"Soir�e.txt" au lieu de "Soirée.txt" (c.à.d. que le e accent aigu est
remplacé par un point d'interrogation dans une sorte de losange noir, je
précise au cas où ce soit ce message qui ait un problème d'encodage...).

Pour autant, le shell n'a pas l'air embêté par cet accent, la complétion
<TAB> marche très bien, je peux ouvrir le fichier, ou même le renommer
si je veux. Mais tous les accents sont toujours affichés avec ce
caractère bizarre à la place.

Si je fais un stat sur le fichier, il me dit :
File: `Soir\351e.txt'
Si je ne me trompe pas, ce \351 (octal) correspond à E9, qui est le code
UTF de 'é'. Donc le caractère est bien censé être un 'é', mais il ne
s'affiche pas comme tel. Je ne sais pas pourquoi.

Si je copie le fichier sur la machine destination (par scp), j'obtiens
un fichier que ls me montre comme "Soir?e.txt". stat, par contre, me
montre toujours un \351. Pire encore, si j'essaie d'utiliser la
tab-completion du shell sur ce fichier, il m'affiche à nouveau
"Soir�e.txt", et en prime la ligne de commande semble se planter (je ne
peux plus rien taper d'autre, je suis obligé de faire Ctrl-C pour
annuler, mais rien de pire).

J'ai noté aussi que si je crée un fichier Soirée.txt sur la machine
destination, non seulement il apparait avec son accent dans ls, mais
dans la sortie de stat aussi.

Est-ce que quelqu'un peut m'aider à renommer les fichiers comme il faut
sur la machine source, de manière à ce que je puisse les copier
proprement sur la destination ?

(j'ai un peu essayé de jouer avec convmv, mais sans succès)

Merci d'avance !
--
Rémi Moyen

2 réponses

Avatar
Marc
Rémi Moyen wrote:

Quand je me connecte sur la machine "source" (par ssh), LANG vaut
Un ls sur un fichier à problème m'affiche, par exemple,
"Soir�e.txt" au lieu de "Soirée.txt" (c.à.d. que le e accent aigu est
remplacé par un point d'interrogation dans une sorte de losange noir, je
précise au cas où ce soit ce message qui ait un problème d'encodage...).

Pour autant, le shell n'a pas l'air embêté par cet accent, la complétion
<TAB> marche très bien, je peux ouvrir le fichier, ou même le renommer
si je veux. Mais tous les accents sont toujours affichés avec ce
caractère bizarre à la place.

Si je fais un stat sur le fichier, il me dit :
File: `Soir351e.txt'
Si je ne me trompe pas, ce 351 (octal) correspond à E9, qui est le code
UTF de 'é'. Donc le caractère est bien censé être un 'é', mais il ne
s'affiche pas comme tel. Je ne sais pas pourquoi.



Euh, ne pas confondre unicode et utf-8. En utf-8, un é prend 2
schtroumpfs, qu'on pourrait représenter par : é. Là ça doit être du
latin1 (ou plutôt latin9 à voir le @euro).

(j'ai un peu essayé de jouer avec convmv, mais sans succès)



convmv -f latin1 -t utf8 semble marcher. Sinon, c'est iconv l'outil de
base.
Avatar
Rémi Moyen
On 28/01/12 18:27, Marc wrote:
Rémi Moyen wrote:

Quand je me connecte sur la machine "source" (par ssh), LANG vaut
Un ls sur un fichier à problème m'affiche, par exemple,
"Soir�e.txt" au lieu de "Soirée.txt"

Si je fais un stat sur le fichier, il me dit :
File: `Soir351e.txt'
Si je ne me trompe pas, ce 351 (octal) correspond à E9, qui est le code
UTF de 'é'. Donc le caractère est bien censé être un 'é', mais il ne
s'affiche pas comme tel. Je ne sais pas pourquoi.



Euh, ne pas confondre unicode et utf-8. En utf-8, un é prend 2
schtroumpfs, qu'on pourrait représenter par : é. Là ça doit être du
latin1 (ou plutôt latin9 à voir le @euro).



Oui, tu as certainement raison. Je ne maitrise pas du tout ces histoires
et distinctions. Je pense aussi que le système source est en latin9, je
crois me souvenir que quand je l'ai installé (il y a au moins 5 ans,
voir 10), Debian m'a demandé l'encodage à utiliser (et à l'époque,
iso8859-15 était un choix encore raisonnable, je crois...).

(j'ai un peu essayé de jouer avec convmv, mais sans succès)



convmv -f latin1 -t utf8 semble marcher. Sinon, c'est iconv l'outil de
base.



Oui, ça marche très bien ! Super, merci ! Je n'ai plus qu'à faire
tourner convmv sur toute la partie du système qui m'intéresse pour
corriger ça.
--
Rémi Moyen