A categoria LC_COLLATE
locale controla a ordem de classificação. LC_ALL
define todas as categorias.
Com LC_COLLATE=C
, as sequências são ordenadas byte por byte. Os bytes não precisam ser caracteres ASCII (somente valores de bytes entre 0 e 127 são ASCII). Em um sistema unix, o Unicode é quase sempre codificado como UTF-8 . O UTF-8 tem a propriedade de que a codificação de caracteres como seqüências de bytes preserva sua ordenação, e assim ordenar strings UTF-8 em ordem lexicográfica de bytes é equivalente a classificá-las em ordem lexicográfica de caracteres. Portanto LC_COLLATE=C
é adequado para ordenar Unicode codificado em UTF-8 lexicograficamente de acordo com os valores dos caracteres.
Observe que o Java na verdade não classifica de acordo com os valores de caractere Unicode, mas de acordo com a codificação UTF-16. Isso faz diferença com pares substitutos , ou seja, se você tiver pontos de código acima de 65535.
Nem a ordenação por representação de bytes UTF-8 nem a ordenação Java nem o utilitário sort
em um código de idioma UTF-8 no GNU / Linux usam combinando caracteres em conta, por exemplo á
(U + 0061 LETRA PEQUENA A seguido por U + 0301 COMBINANDO AGUDA ACENTUADA) é classificado de forma diferente de á
(U + 00E1 LATINA PEQUENA LETRA A COM AGUDO) (em uma localidade UTF-8, ambos terminam equivalentes para a
na primeira passagem, mas a segunda passagem classifica por ponto de código).