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

locales et classes de caractères

1 réponse
Avatar
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 'e\n\303\251\n\303\250\n' | \grep '[[:alpha:]]'
e
é
è
mpg@roth:~% printf 'e\n\303\251\n\303\250\n' | \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/

1 réponse

Avatar
Vincent Lefevre
Bonjour,

Dans l'article <i43vq7$u12$,
Manuel Pégourié-Gonnard écrit:

:~% 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 - Web: <http://www.vinc17.net/&gt;
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/&gt;
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)