hhaamu wrote:Huomasin tallaisen oudon kaytoksen suomilokaalissa (fi_FI.utf8):
Code: Select all
$ echo -e '\346\210\257\347\224\274\n\346\236\227\347\265\203'|uniq -c
2 æ¯ç¼
Mutta kaikissa muissa lokaaleissa joita koneeltani loytyy (mm. en_GB.utf8, ja_JP.utf8 ja C) kaytos on tallainen:
Code: Select all
$ echo -e '\346\210\257\347\224\274\n\346\236\227\347\265\203'|LC_COLLATE=sv_SE.utf8 uniq -c
1 æ¯ç¼
1 æçµ
Nama kyseiset kanjit eivat ole samoja, senhan jo oktaalisarjat (ja paljas silma) nayttavat. Loytyyko tata bugia muilta?
Oktaalisarjat eivät unicodessa kerro paljoakaan, esimerkiksi samaksi tulkittavan Å:n voi esittää ainakin kolmella eri näköisellä sarjalla.
Tuollainen kanjien samuus näyttää kyllä sikäli päättömältä, että nopean testauksen perusteella suomilokaali taas ei osaa tulkita samoiksi merkeiksi sellaisia, joita se voisi hyvinkin tulkita. Kehittäjille voisi muuten laittaa bugi-ilmoituksen, mutta glibc:n tapauksessa se on perinteisesti ollut aika hyödytöntä.
ja /etc/locales.buildissa on seuraava rivi:
Jos tuossa on koko locales.build niin silloin kai koneella ei pitäisi olla muita lokaaleja ja muiden lokaalien käyttäminen aiheuttaisi C-lokaalin valinnan.
Ihmetyttaa etta miksi nama lokaalit vertaavat merkkeja toisiinsa nain summittaisesti eika bittien tarkkuudella. Tuli ilmi kun satuin laittamaan pgsql:n kayttamaan lokaaleja (lc_collate) ja se alkoi valittamaan etta ei voi laittaa uniikkiconstrainttia paikalleen. Nyt se on taas normaalilokaaleilla.
Lokaalien ideahan olisi siinä, että merkkijonojen vertailu ja järjestely tehdään paikallisen standardin (esim. Englannissa ä=a) mukaan. Jos haluat biteittäistä vertailua sinun pitää käyttää C-lokaalia.