locale pt_BR e sort
Olá,
O locale, além de definir o conjunto de caracteres (etc, etc...), define
também a ordem em que devem aparecer num sort, por exemplo.
Não sei onde estou errando, mas definindo o locale pt_BR, não consigo
fazer um sort como estava esperando.
Exemplo:
tomando um arquivo teste como abaixo:
-- begin file teste.txt --
ANDRE A
ANDRÉ H
ANDRÉ B
ANDRE J
ANDREIA B
ANDRÉIA A
-- end file teste.txt --
com o locale C/POSIX, o sort dá o seguinte resultado:
# export set LANG=POSIX
# sort teste.txt
ANDRE A
ANDRE J
ANDREIA B
ANDRÉ B
ANDRÉ H
ANDRÉIA A
Até aí, tudo bem. O problema é quando seleciono o locale pt_BR
# export set LANG=pt_BR
# sort teste.txt
ANDRE A
ANDRÉ B
ANDRÉ H
ANDRÉIA A
ANDREIA B
ANDRE J
O resultado esperado seria:
ANDRE A
ANDRÉ B
ANDRÉ H
ANDRE J
ANDRÉIA A
ANDREIA B
(notem o "ANDRE J", ele não deveria ir após a linha "ANDREIA B", como
aconteceu no locale pt_BR)
Quem controla a ordem dos caracteres é a variável LC_COLLATE.
Pesquisando um pouco mais, descobri que no template para a geração do
pt_BR (/usr/share/i18n/locales/pt_BR), na definição do LC_COLLATE,
encontramos:
> LC_COLLATE
> copy "iso14651_t1"
> END LC_COLLATE
e no arquivo "iso14651_t1":
...
> <U0020> IGNORE;IGNORE;IGNORE;<U0020> # 32 <SP>
...
Aparentemente (e tudo indica isso), o sort está simplesmente ignorando o
caracter 32 (0x20, ou " " - espaço).
Alguém sabe por quê? E como mudar isso?
A definição do pt_BR não está errada neste caso?
Isso altera o comportamento de consultas em uma base de dados, por
exemplo...
Grato por qualquer dica.
Abraços,
Fernando Soto
Reply to: