URL: https://linuxfr.org/forums/programmation-c--2/posts/regex-et-encodage Title: Regex et encodage Authors: apkwa Date: 2012年09月28日T22:30:30+02:00 Tags: Score: 2 Bonjour, Voilà, dans mon programme j'utilise la fonction regexec qui prend en argument une chaîne que l'utilisateur entre. Jusque là pas de problème, et ca se passe plutôt bien. Le problème, c'est que ce programme parse un fichier contenant différents path venant d'un Windows XP, dont certaines parties contiennent des accents. Du coup, ma regex 'Rom.o' ne matche jamais 'Roméo'. Bon, j'ai fini par saisir que mes noms de paths étaient inscrits dans un encodage de 8bits, alors que mon Linux est en Unicode. Pour obtenir le même type d'encodage, on peut par exemple taper un printf "Rom\xE9o". Et pour preuve: $ printf "Rom\xE9o\n" | hexdump -C 00000000 52 6f 6d e9 6f 0a |Rom.o.| $ cat list.txt |grep -E 'Rom' | hexdump -C 00000000 52 6f 6d e9 6f 0a |Rom.o.| $ echo "Roméo" | hexdump -C 00000000 52 6f 6d c3 a9 6f 0a |Rom..o.| Le problème, c'est que si je fais un: grep -E 'Rom\xE9o' list.txt je ne matche toujours pas ma ligne... Auriez-vous une idée? PS: Mon fichier texte est généré sur Le Linux, après que les répertoires et fichiers soient recopiés à partir du Windows. Il est utilisé par d'autres programmes et regénéré périodiquement mais je ne sais jamais quand. Par conséquent, je ne peux pas le convertir une bonne fois en UTF-8...

AltStyle によって変換されたページ (->オリジナル) /