O tratamento de URL do tipo GNU com UTF-8 - onde isso é documentado?

4

Isso me machuca:

echo -e "http://z.com\nhttps://a.com" | sort

vs.

echo -e "http://z.com\nhttps://a.com" | LC_ALL=C sort

Parece que o tipo ignora http vs https ao classificar em UTF-8. Mas o que realmente me deixa louco é que não consigo encontrar um único fragmento de documentação sobre esse comportamento. Alguém pode me indicar isso?

    
por robbie.huffman 14.01.2017 / 03:12

1 resposta

5

Sob o C locale, sort classifica na ordem dada pelos bytes brutos; na en_US locale, sort ordena a ordem lexicográfica culturalmente apropriada:

  • No C locale:

    http://z classifica antes de https://a porque ':' (58) é menor que 's' (115).

  • No en_US locale:

    https://a classifica antes de http://z porque a ordem lexicográfica do inglês americano ignora os separadores, de modo que as sequências são agrupadas como se fossem httpsa e httpz , e obviamente s vem antes de z . / p>

man 1 sort diz:

     ***  WARNING  ***  The locale specified by the environment affects sort
     order.  Set LC_ALL=C to get the traditional sort order that uses native
     byte values.

Para alterar apenas a ordem de classificação, você pode definir a variável de ambiente LC_COLLATE :

$ echo -e 'ab:d\nabc:d' | LC_COLLATE=en_US.UTF-8 sort
abc:d
ab:d

$ echo -e 'ab:d\nabc:d' | LC_COLLATE=C.UTF-8 sort
ab:d
abc:d

Nota: a variável de ambiente LC_ALL tem precedência sobre as variáveis LC_ detalhadas.

    
por 14.01.2017 / 04:55

Tags