locales et classes de caractères

Le
Manuel Pégourié-Gonnard
Bonjour,

Je joue un peu avec les locales et les classes de caractères en regex,
et je découvre que chez moi :

mpg@roth:~% env | egrep 'LANG|LC_'
LANG=fr_FR.utf8
mpg@roth:~% printf 'e303251303250' | grep '[[:alpha:]]'
e
é
è
mpg@roth:~% printf 'e303251303250' | grep '[[=e=]]'
e

Je me demande pourquoi « é » et « è » ne sont pas considérés comme
équivalents à « e ».

En fait, qui spécifie quels caractères sont censés être équivalents
(Unicode, l'Académie française, ) et où cette information est-elle
stockée sur ma machine (sous Debian GNU/Linux) ?

Par ailleurs, les locales « C » et « POSIX » sont-elles toujours
équivalentes ?

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
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
Vincent Lefevre
Le #22471431
Bonjour,

Dans l'article Manuel Pégourié-Gonnard
:~% env | egrep 'LANG|LC_'
LANG=fr_FR.utf8
:~% printf 'en303251n303250n' | grep '[[:alpha:]]'
e
é
è
:~% printf 'en303251n303250n' | grep '[[=e=]]'
e

Je me demande pourquoi « é » et « è » ne sont pas considérés comme
équivalents à « e ».



Et le [[=e=]] ne semble pas fonctionner du tout dans les locales
non UTF-8:

for i in C POSIX fr_FR.ISO8859-1 fr_FR.UTF-8
do
echo $i && echo e | LC_ALL=$i grep '[[=e=]]'
done

C
POSIX
fr_FR.ISO8859-1
fr_FR.UTF-8
e

Cette forme n'est même pas décrite dans la page man de grep
(sous Linux).

En fait, qui spécifie quels caractères sont censés être équivalents
(Unicode, l'Académie française, ...) et où cette information est-elle
stockée sur ma machine (sous Debian GNU/Linux) ?



Je ne sais pas, mais y a-t-il un lien avec les "collating characters"?

Par ailleurs, les locales « C » et « POSIX » sont-elles toujours
équivalentes ?



Normalement, sur les systèmes POSIX, oui. "C" est utilisée par la
norme C ISO et "POSIX" par la norme IEEE 1003.1 (POSIX.1), qui ne
sont pas censées être contradictoires. POSIX dit:

The strings "C" and "POSIX" are reserved as identifiers for the
POSIX locale (see POSIX Locale).

et

7.2 POSIX Locale

Conforming systems shall provide a POSIX locale, also known as
the C locale.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
Publicité
Poster une réponse
Anonyme