[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: