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

bash et utf-8

3 réponses
Avatar
Nicolas Michel
Bonjour =E0 tous

=C7a fait un bail que j'ai plus de serveur usenet,=20
donc d=E9sol=E9 mais je poste depuis groups.google ...
(oui, c'est mal, m=E9aculpa)

Bref, j'ai une petite difficult=E9 qui me prends bien la t=EAte,
plut=F4t que de harceler patpro sur sa ML jusqu'=E0 ce qu'il me ha=EFsse,=
=20
je me dis qu'il y a peut-=EAtre un des barbus du coin qui sait y faire :)

Voil=E0 en r=E9sum=E9 le probl=E8me :=20

$ touch fran=E7ais
$ find . -name "*=E7*"

La commande find ne trouve pas le fichier.

Le contexte :
Certains utilisateurs se plaignent de crash fr=E9quent de word.
Dans 2 cas j'ai pu r=E9soudre le probl=E8me en renommant le dossier parent =
:
Un coup il y avait un / dans le nom du dossier, l'autre un !

Bref, je cherche un moyen pour trouver tous les fichiers / dossiers dont le=
nom est exotique. Pour ce faire, j'ai tent=E9 de faire un truc genre :

find $HOME -name "*[^[:alnum:]|.| |_|-|=E9|=E8|=EA|=EB]*" -print0 |xargs -=
0 ls -d1B > /tmp/To_Rename.txt

Donc les questions =E0 pr=E9sent :
1) avez-vous un petit outil qui ferait =E7a plus simplement ?
Notez bien que je ne cherche pas un truc qui trouve tous les fichiers conte=
nant un ! dans le nom, parce que il me faudrait alors passer en revue tous =
les caract=E8res utf-8 possible et imaginable et que j'ai pas tr=E8s envie =
de me mettre au chinois, au cyrillique et autre.

2) pourriez-vous m'expliquer ou me donner un lien qui explique "c'est quoi =
le probl=E8me des encodages" ?=20

3) connaissez vous un outil qui g=E8re les regex unicode ?
<http://www.regular-expressions.info/unicode.html>

Merci !

Plouf

Nicolas Michel

3 réponses

Avatar
Paul Gaborit
À (at) Fri, 28 Sep 2012 07:29:51 -0700 (PDT),
Nicolas Michel écrivait (wrote):

Donc les questions à présent :
1) avez-vous un petit outil qui ferait ça plus simplement ?



Tout prêt ? Non.

2) pourriez-vous m'expliquer ou me donner un lien qui explique "c'est
quoi le problème des encodages" ?



Pour les noms de fichiers, HFS+ (et le Finder) utilise de l'UTF-16 avec
une normalisation NFD.

Vos commandes shell n'utilisent sans doute pas cet encodage et surtout
pas cette normalisation...

3) connaissez vous un outil qui gère les regex unicode ?
<http://www.regular-expressions.info/unicode.html>



Perl, Python, Ruby...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
Nicolas Michel
Salut Paul

Le vendredi 28 septembre 2012 17:28:14 UTC+2, Paul Gaborit a écrit :

Pour les noms de fichiers, HFS+ (et le Finder) utilise de l'UTF-16 avec
une normalisation NFD.

Vos commandes shell n'utilisent sans doute pas cet encodage et surtout
pas cette normalisation...



OK, merci pour la réponse simple et claire.

Perl, Python, Ruby...



ok, je ne pratique pas trop mais c'est une très bonne occasion de m'y met tre
Merci !
Avatar
Nicolas Michel
Hello

Finalement j'ai bien fait de harceler Patpro :
il a trouvé une option dans grep, "-P", qui fait des regex perl.

C'est presque bon, il me manque encore des éléments, mais en gros
comme Paul le disais, hfs+ écrit en utf-16 décomposé,
donc chaque caractère accentué est composé de 3 unicode :
la lettre, une liaison puis l'accent.

Par exemple
ç = [x63][xcc][xa7]
è = "[x65][xcc][x81]"
à = "[a][xcc][x80]"
ê = "[e][xcc][x82]"
ï = "[i][xcc][x88]"

Ce qui donne un truc du genre (pas encore finit, il manque des accents)

find . |grep -P "[aeiou][xcc][x80-x88]"

où [aeiou] sont les voyelles, [xcc] est le unicode "cc" de liaison
et [x80-x82] les char de 80 à 82, c'est à dire accent aigu, grave, ci rconflexe, etc ...

On peut voir ce qui est écrit sur le disque avec la commande "od -h"

Voilà ...

Merci encore