Accents dans des nom de fichiers

Le
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: `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.

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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc
Le #24203441
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.
Rémi Moyen
Le #24203701
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
Publicité
Poster une réponse
Anonyme