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

Poser une question


Dans l'article Manuel Pégourié-Gonnard
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).
Je ne sais pas, mais y a-t-il un lien avec les "collating characters"?
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)