Как сортиранСто Π½Π° Linux сортира Π½ΠΈΠ·ΠΎΠ²Π΅

въвСдСниС

Всичко Π·Π°ΠΏΠΎΡ‡Π½Π° с ΠΊΡ€Π°Ρ‚ΡŠΠΊ скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° информация Π·Π° адрСси Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΏΠΎΡ‰Π° слуТитСли, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ списъка с ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° пощСнския списък с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π° слуТитСли, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° Ρ‡ΠΎΠ²Π΅ΡˆΠΊΠΈ рСсурси. И Π΄Π²Π°Ρ‚Π° списъка бяха Скспортирани Π² тСкстови Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Unicode. UTF-8 ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ с окончания Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° Unix.

ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ mail.txt

Иванов АндрСй;[email protected]

ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ buhg.txt

Иванова Алла;маляр
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ
Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр

Π—Π° Π΄Π° сС слСят, Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ бяха сортирани Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Unix Π²ΠΈΠ΄ ΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° Π²Ρ…ΠΎΠ΄Π° Π½Π° Unix ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ с Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°:

$> sort buhg.txt > buhg.srt
$> sort mail.txt > mail.srt
$> join buhg.srt mail.srt > result
join: buhg.srt:4: is not sorted: Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ

Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ сортиранСто с ΠΎΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ цяло сортиранСто Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ съвпадСниС Π½Π° мъТки ΠΈ ТСнски Ρ„Π°ΠΌΠΈΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° ТСнскитС са ΠΏΡ€Π΅Π΄ ΠΌΡŠΠΆΠΊΠΈΡ‚Π΅:

$> sort buhg.txt
Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Иванова Алла;маляр
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ

ИзглСТда ΠΊΠ°Ρ‚ΠΎ бъг ΠΏΡ€ΠΈ сортиранС Π² Unicode ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚ΠΎ проява Π½Π° Ρ„Π΅ΠΌΠΈΠ½ΠΈΠ·ΡŠΠΌ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° сортиранС. ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΅ ΠΏΠΎ-ΠΏΡ€Π°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ.

НСка Π³ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ засСга ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към ΠΈ сС фокусирайтС Π²ΡŠΡ€Ρ…Ρƒ Π²ΠΈΠ΄. НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° Π½Π°ΡƒΡ‡Π½ΠΎΡ‚ΠΎ ΠΌΡƒΡˆΠΊΠ°Π½Π΅. ΠŸΡŠΡ€Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ Π»ΠΎΠΊΠ°Π»Π° ΠΎΡ‚ en_US Π½Π° ru_ru. Π—Π° сортиранС Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата LC_COLLATE, Π½ΠΎ няма Π΄Π° Π³ΡƒΠ±ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π΄Ρ€Π΅Π±ΠΎΠ»ΠΈΠΈ:

$> LANG=ru_RU.UTF-8 sort buhg.txt
Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Иванова Алла;маляр
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ

Нищо Π½Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΠΌΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² Π΅Π΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅:

$> iconv -f UTF-8 -t KOI8-R buhg.txt 
 | LANG=ru_RU.KOI8-R sort 
 | iconv -f KOI8-R -t UTF8

ΠžΡ‚Π½ΠΎΠ²ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ.

Нищо Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ, трябва Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Няма Π½ΠΈΡ‰ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π° рускитС Ρ„Π°ΠΌΠΈΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ ΠΈΠΌΠ° Π²ΡŠΠΏΡ€ΠΎΡΠΈ относно Π΄Ρ€ΡƒΠ³ΠΈ странности Π½Π° сортиранСто. НапримСр, Π΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: сортиранСто Π² unix Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° символитС '-' (Ρ‚ΠΈΡ€Π΅) ΠΊΠ°Ρ‚ΠΎ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ. Накратко, Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ "ab", "aa", "ac" сС сортират ΠΊΠ°Ρ‚ΠΎ "aa", "ab", "ac".

ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ стандартСн навсякъдС: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π»ΠΎΠΊΠ°Π»Π° Π½Π° програмиста "Β° Π‘" ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ щастливи. ΠžΠΏΠΈΡ‚Π²Π°ΠΌΠ΅:

$> LANG=C sort buhg.txt
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ
Иванова Алла;Π°Π΄Π²ΠΎΠΊΠ°Ρ‚

НСщо сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ. Иванови сС ΠΏΠΎΠ΄Ρ€Π΅Π΄ΠΈΡ…Π° Π² правилния Ρ€Π΅Π΄, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π™ΠΎΠ»ΠΊΠΈΠ½Π° сС ΠΏΠΎΠ΄Ρ…Π»ΡŠΠ·Π½Π° някъдС. Π”Π° сС β€‹β€‹Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

$> LANG=C sort buhg.txt > buhg.srt
$> LANG=C sort mail.txt > mail.srt
$> LANG=C join buhg.srt mail.srt > result

Π Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π²Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. И Ρ‚ΠΎΠ²Π° Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Π™ΠΎΠ»ΠΊΠΈΠ½Π° Π² ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ€Π΅ΡˆΠ΅Π½, Π½ΠΎ Π·Π° всСки случай Π½Π΅ΠΊΠ° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΎ руско ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ - Windows CP1251:

$> iconv -f UTF-8 -t CP1251 buhg.txt 
 | LANG=ru_RU.CP1251 sort 
 | iconv -f CP1251 -t UTF8 

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ сортиранСто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π΅ странно, Ρ‰Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π° "Β° Π‘", ΠΈ цСлият ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΌΠΈΠ½Π°Π²Π° Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ. Някаква мистика.

НС харСсвам мистицизма Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡ€ΠΈΠΊΡ€ΠΈΠ²Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅. Π©Π΅ трябва Π΄Π° сС Π·Π°Π΅ΠΌΠ΅ΠΌ сСриозно с Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π²ΠΈΠ΄ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ влияниС LC_COLLATE .

Накрая Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° отговоря Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅:

  • Π·Π°Ρ‰ΠΎ Ρ„Π°ΠΌΠΈΠ»Π½ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΆΠ΅Π½ΠΈΡ‚Π΅ са сортирани Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ
  • Π·Π°Ρ‰ΠΎ LANG=ru_RU.CP1251 сС ΠΎΠΊΠ°Π·Π° Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ΡŠΡ‚ LANG=C
  • Π·Π°Ρ‰ΠΎ Ρ‚ΠΈ Π²ΠΈΠ΄ ΠΈ ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ΄Π΅ΠΈ Π·Π° Ρ€Π΅Π΄Π° Π½Π° сортиранитС Π½ΠΈΠ·ΠΎΠ²Π΅
  • Π·Π°Ρ‰ΠΎ ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ във всички ΠΌΠΎΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ
  • накрая ΠΊΠ°ΠΊ Π΄Π° сортиратС Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΏΠΎ ваш вкус

Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π² Unicode

ΠŸΡŠΡ€Π²Π°Ρ‚Π° спирка Ρ‰Π΅ бъдС ΠΎΠ·Π°Π³Π»Π°Π²Π΅Π½ тСхничСски Π΄ΠΎΠΊΠ»Π°Π΄ β„–10 ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС Π½Π° Unicode ΠΎΠ½Π»Π°ΠΉΠ½ unicode.org. Π”ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎ тСхничСски подробности, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ си позволя Π΄Π° Π΄Π°ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° основнитС ΠΈΠ΄Π΅ΠΈ.

Π‘Π²Π΅Ρ€ΠΊΠ° - "сравняванСто" Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ Π² основата Π½Π° всСки Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС. Π‘Π°ΠΌΠΈΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ("Π±Π°Π»ΠΎΠ½", "сливанС", "Π±ΡŠΡ€Π·ΠΎ"), Π½ΠΎ всички Ρ‚Π΅ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сравнСниС Π½Π° Ρ‡ΠΈΡ„Ρ‚ Π½ΠΈΠ·ΠΎΠ²Π΅, Π·Π° Π΄Π° опрСдСлят своя Ρ€Π΅Π΄.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π½Π° СстСствСн Π΅Π·ΠΈΠΊ Π΅ доста Ρ‚Ρ€ΡƒΠ΄Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π”ΠΎΡ€ΠΈ ΠΈ Π² Π½Π°ΠΉ-проститС Π΅Π΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° Π±ΡƒΠΊΠ²ΠΈΡ‚Π΅ Π² Π°Π·Π±ΡƒΠΊΠ°Ρ‚Π°, Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ английската Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π°, Π²Π΅Ρ‡Π΅ няма Π΄Π° съвпада с Ρ€Π΅Π΄Π° Π½Π° числовитС стойности, с ΠΊΠΎΠΈΡ‚ΠΎ са ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ Ρ‚Π΅Π·ΠΈ Π±ΡƒΠΊΠ²ΠΈ. Π’Π°ΠΊΠ° Ρ‡Π΅ Π² нСмската Π°Π·Π±ΡƒΠΊΠ° Π±ΡƒΠΊΠ²Π°Ρ‚Π° Γ– стои ΠΌΠ΅ΠΆΠ΄Ρƒ О ΠΈ P, ΠΈ Π² ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ CP850 тя ΠΏΠΎΠΏΠ°Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΓΏ ΠΈ Ü.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° сС абстрахиратС ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ ΠΈ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ β€žΠΈΠ΄Π΅Π°Π»Π½ΠΈΡ‚Π΅β€œ Π±ΡƒΠΊΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ Π² някакъв Ρ€Π΅Π΄, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π² Unicode. ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ UTF8, UTF16 ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ Π±Π°ΠΉΡ‚ KOI8-R (Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ подмноТСство Π½Π° Unicode) Ρ‰Π΅ Π΄Π°Π΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΈ прСдставяния Π½Π° Π±ΡƒΠΊΠ²ΠΈΡ‚Π΅, Π½ΠΎ Ρ‰Π΅ сС отнася Π΄ΠΎ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π±Π°Π·ΠΎΠ²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Оказва сС, Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π° със символи ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΉ присвоим унивСрсалСн Ρ€Π΅Π΄ Π½Π° символитС. Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Π°Π·Π±ΡƒΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π±ΡƒΠΊΠ²ΠΈ, Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° Ρ‚Π΅Π·ΠΈ Π±ΡƒΠΊΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°. НапримСр Π½Π° фрСнски Γ† Ρ‰Π΅ сС Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ Π»ΠΈΠ³Π°Ρ‚ΡƒΡ€Π° ΠΈ сортира ΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠ· AE. На Π½ΠΎΡ€Π²Π΅ΠΆΠΊΠΈ Π΅Π·ΠΈΠΊ Γ† Ρ‰Π΅ бъдС ΠΎΡ‚Π΄Π΅Π»Π½Π° Π±ΡƒΠΊΠ²Π°, която сС Π½Π°ΠΌΠΈΡ€Π° слСд Z. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, освСн Π»ΠΈΠ³Π°Ρ‚ΡƒΡ€ΠΈ ΠΊΠ°Ρ‚ΠΎ Γ† ΠΈΠΌΠ° Π±ΡƒΠΊΠ²ΠΈ, написани с няколко Π·Π½Π°ΠΊΠ°. Π’Π°ΠΊΠ° Ρ‡Π΅ Π² Ρ‡Π΅ΡˆΠΊΠ°Ρ‚Π° Π°Π·Π±ΡƒΠΊΠ° ΠΈΠΌΠ° Π±ΡƒΠΊΠ²Π° Ch, ΠΊΠΎΠΉΡ‚ΠΎ стои ΠΌΠ΅ΠΆΠ΄Ρƒ H ΠΈ I.

Π’ допълнСниС към Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π² Π°Π·Π±ΡƒΠΊΠΈΡ‚Π΅, ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ влияят Π½Π° сортиранСто. По-спСциално възниква Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚: Π² какъв Ρ€Π΅Π΄ трябва Π΄Π° сС появяват Π² Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° Π΄ΡƒΠΌΠΈΡ‚Π΅, ΡΡŠΡΡ‚ΠΎΡΡ‰ΠΈ сС ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ? Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, сортиранСто ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС повлияно ΠΎΡ‚ особСноститС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ. На испански ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»Π΅Π½ Π·Π½Π°ΠΊ сС поставя Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅ (Π₯Π°Ρ€Π΅ΡΠ²Π°Ρˆ Π»ΠΈ ΠΌΡƒΠ·ΠΈΠΊΠ°?). Π’ Ρ‚ΠΎΠ·ΠΈ случай Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ изрСчСния Π½Π΅ трябва Π΄Π° сС Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ извън Π°Π·Π±ΡƒΠΊΠ°Ρ‚Π°, Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° сортиратС Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ?

Няма Π΄Π° сС спирам Π½Π° сортиранСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π½Π° Π΅Π·ΠΈΡ†ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΡ‚ СвропСйскитС. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ с писанС отдясно наляво ΠΈΠ»ΠΈ ΠΎΡ‚Π³ΠΎΡ€Π΅ Π½Π°Π΄ΠΎΠ»Ρƒ са склонни Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π·Π½Π°Ρ†ΠΈ Π² Ρ€Π΅Π΄ΠΎΠ²Π΅ Π² Ρ€Π΅Π΄ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ Π΄ΠΎΡ€ΠΈ Π½Π΅Π°Π·Π±ΡƒΡ‡Π½ΠΈΡ‚Π΅ скриптовС ΠΈΠΌΠ°Ρ‚ свой собствСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ символ ΠΏΠΎ Π·Π½Π°ΠΊ. НапримСр, ΠΉΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΠΎ стил (ΠšΠ»ΡŽΡ‡ΠΎΠ²Π΅ с китайски символи) ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅. Как трябва Π΄Π° сС ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ Π΅ΠΌΠΎΡ‚ΠΈΠΊΠΎΠ½ΠΈ, чСстно ΠΊΠ°Π·Π°Π½ΠΎ нямам идСя, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° измислитС Π½Π΅Ρ‰ΠΎ Π·Π° тях.

Π’ΡŠΠ· основа Π½Π° характСристикитС, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅, бяха Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½ΠΈ основнитС изисквания Π·Π° сравняванС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Unicode Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ:

  • сравнСниСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π½Π΅ зависи ΠΎΡ‚ позицията Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°;
  • послСдоватСлности ΠΎΡ‚ символи, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π΅Π΄ΠΈΠ½ Π·Π½Π°ΠΊ, сС Ρ€Π΅Π΄ΡƒΡ†ΠΈΡ€Π°Ρ‚ Π΄ΠΎ ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π½Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° (A + горният ΠΊΡ€ΡŠΠ³ Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ ΠΊΠ°Ρ‚ΠΎ Γ…);
  • ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС сравняват Π½ΠΈΠ·ΠΎΠ²Π΅, Π·Π½Π°ΠΊ сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° Π² контСкста Π½Π° Π½ΠΈΠ· ΠΈ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° със съсСди Π² Π΅Π΄Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π·Π° сравнСниС (Ch Π½Π° Ρ‡Π΅ΡˆΠΊΠΈ) ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° няколко (Γ† Π½Π° фрСнски Π΅Π·ΠΈΠΊ);
  • всички Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ характСристики (Π°Π·Π±ΡƒΠΊΠ°, Π³Π»Π°Π²Π½ΠΈ/ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ, ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ, Ρ€Π΅Π΄ Π½Π° Π²ΠΈΠ΄ΠΎΠ²Π΅Ρ‚Π΅ писанС) трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π΄ΠΎ Ρ€ΡŠΡ‡Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄Π° (Π΅ΠΌΠΎΠ΄ΠΆΠΈ);
  • сравнСниСто Π΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ само Π·Π° сортиранС, Π½ΠΎ ΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ мСста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ‚ Π½ΠΈΠ·ΠΎΠ²Π΅ (замСстванС Π½Π° {A ... z} Π² тряскам);
  • сравнСниСто трябва Π΄Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π·ΠΎ.

Π’ допълнСниС, Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Ρ…Π° свойства Π·Π° сравнСниС, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π½Π΅ трябва Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°Ρ‚:

  • Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π·Π° сравнСниС Π½Π΅ трябва Π΄Π° изисква ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π½Π°Ρ†ΠΈ Π·Π° всСки Π΅Π·ΠΈΠΊ (рускитС ΠΈ украинскитС Π΅Π·ΠΈΡ†ΠΈ сподСлят ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ кирилски Π·Π½Π°Ρ†ΠΈ);
  • сравнСниСто Π½Π΅ трябва Π΄Π° сС основава Π½Π° Ρ€Π΅Π΄Π° Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ Π² Unicode Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅;
  • Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ Π½Π° Π½ΠΈΠ·Π° Π½Π΅ трябва Π΄Π° бъдС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° Π½ΠΈΠ·Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π½ΠΈΠ· Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΡƒΠ»Ρ‚ΡƒΡ€Π½ΠΈ контСксти ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Π³Π»Π°;
  • Ρ‚Π΅Π³Π»Π°Ρ‚Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят ΠΏΡ€ΠΈ сливанС ΠΈΠ»ΠΈ раздСлянС (ΠΎΡ‚ x < y Ρ‚ΠΎΠ²Π° Π½Π΅ слСдва xz < yz);
  • Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ‚Π΅Π³Π»Π°, сС считат Π·Π° Ρ€Π°Π²Π½ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° сортиранС. Π’ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ възмоТно, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° влоши производитСлността;
  • Ρ€Π΅Π΄ΠΎΠ²Π΅ с Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ‚Π΅Π³Π»Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС размСнят ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ сортиранС. Устойчивостта Π΅ свойство Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС, Π° Π½Π΅ свойство Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ (Π²ΠΈΠΆΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°);
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° сортиранС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΡƒΠ»Ρ‚ΡƒΡ€Π½ΠΈΡ‚Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ сС ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Ρ‚/промСнят.

ΠŸΠΎΡΠΎΡ‡Π΅Π½ΠΎ Π΅ ΡΡŠΡ‰ΠΎ, Ρ‡Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π·Π° сравнСниС Π½Π΅ Π·Π½Π°Π΅ Π½ΠΈΡ‰ΠΎ Π·Π° сСмантиката Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅. Π’Π°ΠΊΠ° Ρ‡Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅, ΡΡŠΡΡ‚ΠΎΡΡ‰ΠΈ сС само ΠΎΡ‚ числа, Π½Π΅ трябва Π΄Π° сС сравняват ΠΊΠ°Ρ‚ΠΎ числа, Π° Π² ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ с английски ΠΈΠΌΠ΅Π½Π° Ρ‡Π»Π΅Π½ΡŠΡ‚ Π½Π΅ трябва Π΄Π° сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° (Π‘ΠΈΠΉΡ‚ΡŠΠ»Ρ, The).

Π—Π° Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ всички Ρ‚Π΅Π·ΠΈ изисквания, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° многостСпСнСн (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ чСтиристСпСнСн) Ρ‚Π°Π±Π»ΠΈΡ‡Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС.

ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ Π² Π½ΠΈΠ·Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π² ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π½Π° Ρ„ΠΎΡ€ΠΌΠ° ΠΈ сС Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ Π·Π° сравнСниС. На всяка Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π·Π° сравнСниС сС присвояват няколко Ρ‚Π΅Π³Π»Π°, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈ Π½Π° няколко Π½ΠΈΠ²Π° Π½Π° сравнСниС. Π’Π΅Π³Π»Π°Ρ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° сравнСниС са Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ (Π² Ρ‚ΠΎΠ·ΠΈ случай Ρ†Π΅Π»ΠΈ числа), ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ сравнСни Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ. спСциално Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π˜Π“ΠΠžΠ Π˜Π ΠΠΠž (0x0) ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π½Π΅ участва Π² сравнСниСто Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° сравнСниС. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π΅Π³Π»Π°Ρ‚Π° Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Π½ΠΈΠ²Π°. На всяко Π½ΠΈΠ²ΠΎ Ρ‚Π΅Π³Π»Π°Ρ‚Π° Π½Π° сравнитСлнитС Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ Π½Π° Π΄Π²Π° Π½ΠΈΠ·Π° сС сравняват послСдоватСлно Π΅Π΄ΠΈΠ½ с Π΄Ρ€ΡƒΠ³.

Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ стойноститС Π½Π° ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚, Π½ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ Unicode Π²ΠΊΠ»ΡŽΡ‡Π²Π° основна Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π° Ρ‚Π΅Π³Π»ΠΎ - β€žΠ’Π°Π±Π»ΠΈΡ†Π° Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π·Π° сортиранС Π½Π° Unicode ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅β€œ (Π”Π£Π¦Π•Π’). Искам Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ настройката Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° LC_COLLATE Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ индикация Π·Π° ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с Ρ‚Π΅Π³Π»ΠΎ във функцията Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅.

Π’Π΅Π³Π»ΠΎΠ²Π½ΠΈ ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ΠΈ Π”Π£Π¦Π•Π’ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  • Π½Π° ΠΏΡŠΡ€Π²ΠΎ Π½ΠΈΠ²ΠΎ всички Π±ΡƒΠΊΠ²ΠΈ сС свСТдат Π΄ΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, Π΄ΠΈΠ°ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ сС ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΡΡ‚, ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ (Π½Π΅ всички) сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚;
  • Π½Π° Π²Ρ‚ΠΎΡ€ΠΎ Π½ΠΈΠ²ΠΎ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ само Π΄ΠΈΠ°ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ;
  • Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π΅ само Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€;
  • Π½Π° Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΎ Π½ΠΈΠ²ΠΎ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ само ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π² няколко прСминавания: ΠΏΡŠΡ€Π²ΠΎ сС сравняват ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ; Π°ΠΊΠΎ Ρ‚Π΅Π³Π»Π°Ρ‚Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚, Ρ‚ΠΎ сС сравнява ΠΎΡ‚Π½ΠΎΠ²ΠΎ с Ρ‚Π΅Π³Π»Π°Ρ‚Π° ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎ Π½ΠΈΠ²ΠΎ; слСд Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π±ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈ ΠΈ Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΈ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ Π·Π° сравнСниС с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Π³Π»Π°. Π Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ‚Π΅Π³Π»Π° Π½Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ Π½ΠΈΠ²Π°, сС считат Π·Π° Ρ€Π°Π²Π½ΠΈ Π΅Π΄ΠΈΠ½ Π½Π° Π΄Ρ€ΡƒΠ³.

Π’ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ (с ΠΊΡƒΠΏ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ тСхничСски подробности) Π΄Π°Π΄Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ #10 - ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Unicode (ACU).

Π’ΡƒΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° сортиранС ΠΎΡ‚ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ става ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ясно. Π‘ΠΈ Π±ΠΈΠ»ΠΎ Ρ…ΡƒΠ±Π°Π²ΠΎ Π΄Π° Π³ΠΎ сравним със стандарта Unicode.

Π—Π° тСстови Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ACU ΠΈΠΌΠ° спСциалСн тСстизползвайки Ρ„Π°ΠΉΠ» Π·Π° Ρ‚Π΅Π³Π»ΠΎ, осъзнавайки Π”Π£Π¦Π•Π’. Π’ΡŠΠ² Ρ„Π°ΠΉΠ»Π° с тСТСсти ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ забавлСния. НапримСр, ΠΈΠΌΠ° Ρ€Π΅Π΄ Π½Π° ΠΌΠ°Π΄ΠΆΠΎΠ½Π³ ΠΈ СвропСйски ΠΏΠ»ΠΎΡ‡ΠΊΠΈ Π·Π° Π΄ΠΎΠΌΠΈΠ½ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π΅Π΄ Π½Π° Π±ΠΎΠΈ Π² тСстС ΠΊΠ°Ρ€Ρ‚ΠΈ (символ 1F000 ΠΈ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ). Π‘ΠΎΠΈΡ‚Π΅ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΡ‚Π΅ сС поставят спорСд ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° Π±Ρ€ΠΈΠ΄ΠΆΠ° - PCBT, Π° ΠΊΠ°Ρ€Ρ‚ΠΈΡ‚Π΅ Π² боята - Π² послСдоватСлността T,2,3 ... K.

Π ΡŠΡ‡Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ сортиранС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π”Π£Π¦Π•Π’ Π±ΠΈ Π±ΠΈΠ»ΠΎ доста досадно, Π½ΠΎ Π·Π° нашС щастиС ΠΈΠΌΠ° имплСмСнтация Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Unicode - "ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Unicode"(ICU).

На сайта Π½Π° Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° ΠΏΡ€Π΅Π· IBM, ΠΈΠΌΠ° Π΄Π΅ΠΌΠΎ страници, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ страница с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. Π’ΡŠΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ тСстови Π½ΠΈΠ·ΠΎΠ²Π΅ с настройки ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ, Π΅Ρ‚ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΎΡ‚ΠΎ сортиранС Π½Π° руски.

Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ
Иванова Алла;Π°Π΄Π²ΠΎΠΊΠ°Ρ‚

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, ΡƒΠ΅Π±ΡΠ°ΠΉΡ‚ΡŠΡ‚ ICU ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° сравнСниС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π§Π—Π’ Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π°ΠΏΠΎΡΡ‚Ρ€ΠΎΡ„ΡŠΡ‚ ΠΈ Ρ‚ΠΈΡ€Π΅Ρ‚ΠΎ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚.

Unicode Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°, Π½ΠΎ ΠΏΠΎΡ‚ΡŠΡ€ΡΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° странното ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ Π² Linux Ρ‰Π΅ трябва Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ някъдС Π΄Ρ€ΡƒΠ³Π°Π΄Π΅.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π² glibc

Π‘ΡŠΡ€Π· ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π²ΠΈΠ΄ Π½Π° GNU Core Utils ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Π² самата ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° локализацията сС свСТда Π΄ΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° стойност Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° LC_COLLATE ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ:

$ sort --debug buhg.txt > buhg.srt
sort: using β€˜en_US.UTF8’ sorting rules

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΡ‚ стандартната функция strcoll, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всичко интСрСсно Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° НЬс.

На ΡƒΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ НЬс посвСтСн Π½Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅Π΄ΠΈΠ½ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„. ΠžΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ НЬс сортиранСто сС основава Π½Π° Π²Π΅Ρ‡Π΅ познатия Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ ACU (ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π·Π° сортиранС Π½Π° Unicode) ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎ близък Π΄ΠΎ Π½Π΅Π³ΠΎ стандарт ISO 14651 (ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈ сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅). По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΠΉ-новия стандарт, трябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π½Π° сайта standards.iso.org ISO 14651 ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ обявСна Π·Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π°, Π½ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ Π»ΠΈΠ½ΠΊ Π²ΠΎΠ΄ΠΈ към Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° страница. Google прСдоставя няколко страници с Π²Ρ€ΡŠΠ·ΠΊΠΈ към ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈ сайтовС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π·Π°ΠΊΡƒΠΏΡƒΠ²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° стандарта Π·Π° сто Π΅Π²Ρ€ΠΎ, Π½ΠΎ Π½Π° Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚Π°Ρ‚Π° страница ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ ΠΈΠΌΠ° ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ към PDF. ΠšΠ°Ρ‚ΠΎ цяло ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ практичСски Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ ACU, Π½ΠΎ сС Ρ‡Π΅Ρ‚Π΅ ΠΏΠΎ-скучно, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ярки ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ характСристики Π½Π° сортиранСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅.

Най-интСрСсната информация ΡƒΠΈΠΊΠΈ имашС Π»ΠΈΠ½ΠΊ към ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° прослСдяванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ с обсъТданС Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π² НЬс. ΠžΡ‚ дискусията сС Π²ΠΈΠΆΠ΄Π°, Ρ‡Π΅ НЬс Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ISOшная маса ΠžΠ±Ρ‰Π°Ρ‚Π° шаблонна Ρ‚Π°Π±Π»ΠΈΡ†Π° (CTT), Ρ‡ΠΈΠΉΡ‚ΠΎ адрСс ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ A стандартСн ISO 14651. ΠœΠ΅ΠΆΠ΄Ρƒ 2000 ΠΈ 2015 Π³. Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² НЬс нямашС ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΈ бСшС доста Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ (ΠΏΠΎΠ½Π΅ външно) ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° вСрсия Π½Π° стандарта. ΠžΡ‚ 2015 Π΄ΠΎ 2018 Π³. имашС адаптация към Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ°Ρ‚Π΅ шанс Π΄Π° сС срСщнСтС Π² рСалния ΠΆΠΈΠ²ΠΎΡ‚ ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΠ²Π° вСрсия Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° (CentOS 8) ΠΈ старата (CentOS 7).

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ с цялата информация Π·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сортирамС Π½ΠΈΠ·ΠΎΠ²Π΅ Π² руския Π»ΠΎΠΊΠ°Π».

ISO 14651 / 14652

Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, която Π½ΠΈ интСрСсува CTT Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции Linux Π΅ Π² указатСля /usr/share/i18n/locales/. Π‘Π°ΠΌΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΅ във Ρ„Π°ΠΉΠ»Π° iso14651_t1_common. Π’ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΊΠΎΠΏΠΈΠ΅ iso14651_t1_common Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ във Ρ„Π°ΠΉΠ»Π° iso14651_t1, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‚ своя страна Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ досиСта, Π² Ρ‚.Ρ‡ en_US ΠΈ ru_ru. Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции Linux всички ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² основната инсталация, Π½ΠΎ Π°ΠΊΠΎ Π½Π΅ са, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ трябва Π΄Π° инсталиратС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ дистрибуцията.

Π€Π°ΠΉΠ»ΠΎΠ²Π° структура iso14651_t1 ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° уТасно многословно, с Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° конструиранС Π½Π° ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ Π°ΠΊΠΎ Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, всичко Π΅ съвсСм просто. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π΅ описана Π² стандарта ISO 14652, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΎΡ‚ сайта open-std.org. Π”Ρ€ΡƒΠ³ΠΎ описаниС Π½Π° файловия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² спСцификации POSIX ΠΎΡ‚ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π³Ρ€ΡƒΠΏΠ°. ΠšΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° стандарта, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ тСкстовС Π½Π° функцията collate_read Π² glibc/locale/programs/ld-collate.c.

Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° структура ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π½Π°ΠΊΡŠΡ‚ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Ρ‰ Π·Π½Π°ΠΊ, Π° краят Π½Π° Ρ€Π΅Π΄Π° слСд Π·Π½Π°ΠΊΠ° # Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€. И Π΄Π²Π°Ρ‚Π° символа ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°:

escape_char /
comment_char %

Π€Π°ΠΉΠ»ΡŠΡ‚ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΆΠ΅Ρ‚ΠΎΠ½ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠ»ΠΈ (ΠšΡŠΠ΄Π΅Ρ‚ΠΎ x Π΅ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π½Π° Ρ†ΠΈΡ„Ρ€Π°). Π’ΠΎΠ²Π° Π΅ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π½ΠΎΡ‚ΠΎ прСдставянС Π½Π° Unicode ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ UCS-4 (UTF-32). Всички Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² ъглови скоби (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ , <2> ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ) сС считат Π·Π° прости Π½ΠΈΠ·ΠΎΠ²ΠΈ константи, ΠΊΠΎΠΈΡ‚ΠΎ нямат ΠΌΠ½ΠΎΠ³ΠΎ смисъл извън контСкста.

Ρ€Π΅Π΄ LC_COLLATE Π½ΠΈ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅, описващи сравнСниСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ слСдващи.

ΠŸΡŠΡ€Π²ΠΎ сС Π΄Π°Π²Π°Ρ‚ ΠΈΠΌΠ΅Π½Π° Π·Π° Ρ‚Π΅Π³Π»Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π·Π° сравнСниС ΠΈ ΠΈΠΌΠ΅Π½Π° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Π·Π½Π°Ρ†ΠΈ. Най-ΠΎΠ±Ρ‰ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½Π° Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ, Π½ΠΎ Ρ‚Π΅ са смСсСни Π² дСйствитСлния Ρ„Π°ΠΉΠ». Π˜ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚Π΅Π³Π»Π°Ρ‚Π° сС Π΄Π°Π²Π°Ρ‚ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ символ (Π·Π½Π°ΠΊ Π·Π° сравнСниС), Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Unicode Π·Π½Π°Ρ†ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ‚Π΅Π³Π»Π°, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΈ Π·Π½Π°Ρ†ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС сравняват.

ΠžΠ±Ρ‰Π°Ρ‚Π° дълТина Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° вСрсия Π½Π° Ρ„Π°ΠΉΠ»Π° Π΅ ΠΎΠΊΠΎΠ»ΠΎ 900 Ρ€Π΅Π΄Π°. Π˜Π·Π²Π°Π΄ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ няколко мСста, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈ няколко Π²ΠΈΠ΄Π° синтаксис.

LC_COLLATE

collating-symbol <RES-1>
collating-symbol <BLK>
collating-symbol <MIN>
collating-symbol <WIDE>
...
collating-symbol <ARABIC>
collating-symbol <ETHPC>
collating-symbol <OSMANYA>
...
collating-symbol <S1D000>..<S1D35F>
collating-symbol <SFFFF> % Guaranteed largest symbol value. Keep at end of this list
...
collating-element <U0413_0301> from "<U0413><U0301>"
collating-element <U0413_0341> from "<U0413><U0341>"

  • ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ символ рСгистрира Π½ΠΈΠ· ОБМАНЯ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с ΠΈΠΌΠ΅Π½Π° Π½Π° Π²Π΅Π·Π½ΠΈ
  • ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ символ .. рСгистрира ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, ΡΡŠΡΡ‚ΠΎΡΡ‰Π° сС ΠΎΡ‚ прСфикс S ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π΅Π½ Ρ†ΠΈΡ„Ρ€ΠΎΠ² суфикс ΠΎΡ‚ 1D000 Π΄ΠΎ 1D35F.
  • FFFF Π² ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ символ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ голямо цяло число Π±Π΅Π· Π·Π½Π°ΠΊ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π½Π° систСма, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ просто ΠΈΠΌΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°
  • ΠΈΠΌΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π² ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ UCS-4
  • ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΡ‰ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚" " рСгистрира Π½ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ Π·Π° Π΄Π²ΠΎΠΉΠΊΠ° ΡƒΠ½ΠΈΠΊΠΎΠ΄ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ са Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚Π΅Π³Π»Π°Ρ‚Π°, сС уточняват дСйствитСлнитС Ρ‚Π΅Π³Π»Π°. Въй ΠΊΠ°Ρ‚ΠΎ само ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ‚Π° ΠΏΠΎ-голямо-ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΠΌΠ°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ сравнСниС, Ρ‚Π΅Π³Π»Π°Ρ‚Π° сС опрСдСлят Ρ‡Ρ€Π΅Π· проста послСдоватСлност ΠΎΡ‚ изброяванС Π½Π° ΠΈΠΌΠ΅Π½Π°. ΠŸΡŠΡ€Π²ΠΎ са ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ "ΠΏΠΎ-Π»Π΅ΠΊΠΈΡ‚Π΅" тСТСсти, слСд Ρ‚ΠΎΠ²Π° "ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅" тСТСсти. НапомнямС, Ρ‡Π΅ Π½Π° всСки Unicode символ сС присвояват Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Π³Π»Π°. Π’ΡƒΠΊ Ρ‚Π΅ са ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈ Π² Π΅Π΄Π½Π° ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° послСдоватСлност. Π’Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎ всяко символично ΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° всяко ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ Π½ΠΈΠ²Π°, Π½ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ мислСно раздСлят ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Π½ΠΈΠ²Π°.

% Symbolic weight assignments

% Third-level weight assignments
<RES-1>
<BLK>
<MIN>
<WIDE>
...
% Second-level weight assignments
<BASE>
<LOWLINE> % COMBINING LOW LINE
<PSILI> % COMBINING COMMA ABOVE
<DASIA> % COMBINING REVERSED COMMA ABOVE
...
% First-level weight assignments
<S0009> % HORIZONTAL TABULATION 
<S000A> % LINE FEED
<S000B> % VERTICAL TABULATION
...
<S0434> % CYRILLIC SMALL LETTER DE
<S0501> % CYRILLIC SMALL LETTER KOMI DE
<S0452> % CYRILLIC SMALL LETTER DJE
<S0503> % CYRILLIC SMALL LETTER KOMI DJE
<S0453> % CYRILLIC SMALL LETTER GJE
<S0499> % CYRILLIC SMALL LETTER ZE WITH DESCENDER
<S0435> % CYRILLIC SMALL LETTER IE
<S04D7> % CYRILLIC SMALL LETTER IE WITH BREVE
<S0454> % CYRILLIC SMALL LETTER UKRAINIAN IE
<S0436> % CYRILLIC SMALL LETTER ZHE

И накрая, Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с дСйствитСлното Ρ‚Π΅Π³Π»ΠΎ.

Π Π°Π·Π΄Π΅Π»ΡŠΡ‚ Π·Π° Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ Π΅ ΠΎΠ³Ρ€Π°Π΄Π΅Π½ Π² Ρ€Π΅Π΄ΠΎΠ²Π΅ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°_Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°_ΠΊΡ€Π°ΠΉ. Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°_Π½Π°Ρ‡Π°Π»ΠΎ опрСдСля Π² ΠΊΠ°ΠΊΠ²Π° посока сС сканират Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° всяко Π½ΠΈΠ²ΠΎ Π½Π° сравнСниС. Настройката ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π½Π°ΠΏΡ€Π΅Π΄. Вялото Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΊΠΎΠ΄Π° Π½Π° Π·Π½Π°ΠΊΠ° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ‚Π΅Π³Π»Π°. Код Π½Π° Π·Π½Π°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС прСдставСн ΠΎΡ‚ самия Π·Π½Π°ΠΊ, ΠΊΠΎΠ΄ΠΎΠ²Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ»ΠΈ символно ΠΈΠΌΠ΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°. Π’Π΅Π³Π»Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄Π°Π΄Π΅Π½ΠΈ ΠΈ Π½Π° символни ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ»ΠΈ самитС символи. Ако сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π½Π°Ρ†ΠΈ, тяхното Ρ‚Π΅Π³Π»ΠΎ Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ числСната стойност Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° (позиция Π² Unicode Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°). Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са посочСни ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ (Π΄ΠΎΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ), сС считат Π·Π° присвоСни Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с основно Ρ‚Π΅Π³Π»ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° позицията Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Unicode. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»Π½Π° стойност Π½Π° Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ Π˜Π“ΠΠžΠ Π˜Π ΠΠ™Π’Π• ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΄Π°Π΄Π΅Π½ Π·Π½Π°ΠΊ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° сравнСниС.

Π—Π° Π΄Π° дСмонстрирам структурата Π½Π° Ρ‚Π΅Π³Π»Π°Ρ‚Π°, ΠΈΠ·Π±Ρ€Π°Ρ… Ρ‚Ρ€ΠΈ доста ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°:

  • Π·Π½Π°Ρ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са напълно ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½ΠΈ
  • Π·Π½Π°Ρ†ΠΈ, Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΈ Π½Π° числото Ρ‚Ρ€ΠΈ Π² ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π΅ Π½ΠΈΠ²Π°
  • Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΊΠΈΡ€ΠΈΠ»ΠΈΡ†Π°Ρ‚Π°, която Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΈΠ°ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π·Π½Π°Ρ†ΠΈ, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° основно ΠΏΠΎ ΠΏΡŠΡ€Π²ΠΎ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΎ Π½ΠΈΠ²ΠΎ.

order_start forward;forward;forward;forward,position
<U0000> IGNORE;IGNORE;IGNORE;IGNORE % NULL (in 6429)
<U0001> IGNORE;IGNORE;IGNORE;IGNORE % START OF HEADING (in 6429)
<U0002> IGNORE;IGNORE;IGNORE;IGNORE % START OF TEXT (in 6429)
...
<U0033> <S0033>;<BASE>;<MIN>;<U0033> % DIGIT THREE
<UFF13> <S0033>;<BASE>;<WIDE>;<UFF13> % FULLWIDTH DIGIT THREE
<U2476> <S0033>;<BASE>;<COMPAT>;<U2476> % PARENTHESIZED DIGIT THREE
<U248A> <S0033>;<BASE>;<COMPAT>;<U248A> % DIGIT THREE FULL STOP
<U1D7D1> <S0033>;<BASE>;<FONT>;<U1D7D1> % MATHEMATICAL BOLD DIGIT THREE
...
<U0430> <S0430>;<BASE>;<MIN>;<U0430> % CYRILLIC SMALL LETTER A
<U0410> <S0430>;<BASE>;<CAP>;<U0410> % CYRILLIC CAPITAL LETTER A
<U04D1> <S04D1>;<BASE>;<MIN>;<U04D1> % CYRILLIC SMALL LETTER A WITH BREVE
<U0430_0306> <S04D1>;<BASE>;<MIN>;<U04D1> % CYRILLIC SMALL LETTER A WITH BREVE
...
<U0431> <S0431>;<BASE>;<MIN>;<U0431> % CYRILLIC SMALL LETTER BE
<U0411> <S0431>;<BASE>;<CAP>;<U0411> % CYRILLIC CAPITAL LETTER BE
<U0432> <S0432>;<BASE>;<MIN>;<U0432> % CYRILLIC SMALL LETTER VE
<U0412> <S0432>;<BASE>;<CAP>;<U0412> % CYRILLIC CAPITAL LETTER VE
...
order_end

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ към сортиранСто Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° статията. Засадата Π΅ Π² Ρ‚Π°Π·ΠΈ част ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ:

<U0020> IGNORE;IGNORE;IGNORE;<U0020> % SPACE
<U0021> IGNORE;IGNORE;IGNORE;<U0021> % EXCLAMATION MARK
<U0022> IGNORE;IGNORE;IGNORE;<U0022> % QUOTATION MARK
...

Π’ΠΈΠΆΠ΄Π° сС, Ρ‡Π΅ Π² Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π» ASCII (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π») ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° ΠΏΡ€ΠΈ сравняванС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. ЕдинствСнитС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ са Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚ във всичко, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС срСщат Π² ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ моя ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (слСд сортиранС) Π·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° сравнСниС ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ Ρ‚Π°ΠΊΠ°:

ΠΠ±Π°ΠΊΠ°Π½ΠΎΠ²ΠœΠΈΡ…Π°ΠΈΠ»ΠΌΠ°Π»ΡΡ€
ЁлкинаЭллакрановщица
Π˜Π²Π°Π½ΠΎΠ²Π°ΠΠ»Π»Π°ΠΌΠ°Π»ΡΡ€
Π˜Π²Π°Π½ΠΎΠ²ΠΠ½Π΄Ρ€Π΅ΠΉΡΠ»Π΅ΡΠ°Ρ€ΡŒ

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с Ρ‚Π΅Π³Π»ΠΎ Π³Π»Π°Π²Π½ΠΈ Π±ΡƒΠΊΠ²ΠΈ Π½Π° руски ΠΈΠ΄Π²Π°Ρ‚ слСд ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ (Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΎ Π½ΠΈΠ²ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ ), сортиранСто ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° LC_COLLATE=C Π·Π°Ρ€Π΅ΠΆΠ΄Π° сС спСциална Ρ‚Π°Π±Π»ΠΈΡ†Π°, която опрСдСля сравнСниСто Π±Π°ΠΉΡ‚ ΠΏΠΎ Π±Π°ΠΉΡ‚

static const uint32_t collseqwc[] =
{
  8, 1, 8, 0x0, 0xff,
  /* 1st-level table */
  6 * sizeof (uint32_t),
  /* 2nd-level table */
  7 * sizeof (uint32_t),
  /* 3rd-level table */
  L'x00', L'x01', L'x02', L'x03', L'x04', L'x05', L'x06', L'x07',
  L'x08', L'x09', L'x0a', L'x0b', L'x0c', L'x0d', L'x0e', L'x0f',

...
  L'xf8', L'xf9', L'xfa', L'xfb', L'xfc', L'xfd', L'xfe', L'xff'
};

Въй ΠΊΠ°Ρ‚ΠΎ Unicode ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Ё ΠΈΠ΄Π²Π° ΠΏΡ€Π΅Π΄ΠΈ A, Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ сС сортират ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

ВСкстови ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ сравнСниСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ чСсто срСщана опСрация ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° CTT доста скъпа ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°. Π—Π° Π΄Π° сС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, тя сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² Π΄Π²ΠΎΠΈΡ‡Π½Π° Ρ„ΠΎΡ€ΠΌΠ° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° localdef.

ΠžΡ‚Π±ΠΎΡ€ localdef ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ» с Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ характСристики (опция -i), Π² ΠΊΠΎΠΉΡ‚ΠΎ всички Π·Π½Π°Ρ†ΠΈ са прСдставСни ΠΎΡ‚ Unicode Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈ Unicode Ρ„Π°ΠΉΠ» Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° Π·Π½Π°Ρ†ΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ (опция -f). Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π»ΠΎΠΊΠ°Π»Π° с ΠΈΠΌΠ΅Ρ‚ΠΎ, посочСно Π² послСдния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€.

glibc ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π΄Π²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°: "Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Π½" ΠΈ "ΠΌΠΎΠ΄Π΅Ρ€Π΅Π½".

Врадиционният Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»Π° Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° поддирСктория Π² /usr/lib/locale/. Π’Π°Π·ΠΈ поддирСктория ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ LC_COLLATE, LC_CTYPE, LC_TIME ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ. Π€Π°ΠΉΠ» LC_Π˜Π”Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ¦Π˜Π― ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π» (ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° дирСкторията) ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΡΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° всички Π»ΠΎΠΊΠ°Π»ΠΈ Π² Π΅Π΄ΠΈΠ½ Π°Ρ€Ρ…ΠΈΠ² /usr/lib/locale/locale-archive, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½ към Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° всички процСси, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ НЬс. Π˜ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»Π° Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Ρ‚ΡŠΡ€ΠΏΡΠ²Π° извСстна канонизация - Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ остават само Ρ†ΠΈΡ„Ρ€ΠΈ ΠΈ Π±ΡƒΠΊΠ²ΠΈ, Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈ Π΄ΠΎ ΠΌΠ°Π»ΠΊΠΈ Π±ΡƒΠΊΠ²ΠΈ. Π’Π°ΠΊΠ° en_RU.KOI8-R, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ru_RU.koi8r.

Π’Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ сС Ρ‚ΡŠΡ€ΡΡΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /usr/share/i18n/locales/ ΠΈ /usr/share/i18n/charmaps/ Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ CTT ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

НапримСр ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°

localedef -i ru_RU -f MAC-CYRILLIC ru_RU.MAC-CYRILLIC

Ρ‰Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Ρ„Π°ΠΉΠ»Π° /usr/share/i18n/locales/ru_RU ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ„Π°ΠΉΠ» Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ /usr/share/i18n/charmaps/MAC-CYRILLIC.gz ΠΈ Π·Π°ΠΏΠ°Π·Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π² /usr/lib/locale/locale-archive ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ en_RU.maccyrillic

Ако Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° LANG = en_US.UTF-8 Ρ‚ΠΎ НЬс Ρ‰Π΅ Ρ‚ΡŠΡ€ΡΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² слСдната послСдоватСлност ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

/usr/lib/locale/locale-archive
/usr/lib/locale/en_US.UTF-8/
/usr/lib/locale/en_US/
/usr/lib/locale/enUTF-8/
/usr/lib/locale/en/

Ако Π΄Π°Π΄Π΅Π½ Π»ΠΎΠΊΠ°Π» сС срСща ΠΊΠ°ΠΊΡ‚ΠΎ Π² традиционния, Ρ‚Π°ΠΊΠ° ΠΈ Π² модСрния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° модСрният ΠΈΠΌΠ° прСдимство.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ списъка с ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° locale -a.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° сравнитСлна Ρ‚Π°Π±Π»ΠΈΡ†Π°

Π‘Π΅Π³Π°, Π²ΡŠΠΎΡ€ΡŠΠΆΠ΅Π½ΠΈ със знания, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ своя собствСна ΠΈΠ΄Π΅Π°Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. Π’Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° трябва ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сравнява рускитС Π±ΡƒΠΊΠ²ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π±ΡƒΠΊΠ²Π°Ρ‚Π° Ё, ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΏΡ€Π΅ΠΏΠΈΠ½Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ†ΠΈ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ASCII.

ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π° сортиранС сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π° Π΅Ρ‚Π°ΠΏΠ°: Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ ΠΈ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½Π° Ρ„ΠΎΡ€ΠΌΠ° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° localdef.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ сравнитСлната Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° рСдакция, във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ISO 14652 ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ са сСкции Π·Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π΅Π³Π»Π°Ρ‚Π° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° маса. Π Π°Π·Π΄Π΅Π»ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π° с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° ΠΏΡ€Π΅Π½Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅-слСд ΠΈ уточняванС Π½Π° позицията, слСд която сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° подмяната. Π—Π°Π²ΡŠΡ€ΡˆΠ²Π° сСкцията с линия ΠΏΡ€Π΅Π½Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅-ΠΊΡ€Π°ΠΉ. Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚ няколко Ρ€Π°Π·Π΄Π΅Π»Π° ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° сС създава Ρ€Π°Π·Π΄Π΅Π» Π·Π° всСки Ρ‚Π°ΠΊΡŠΠ² Ρ€Π°Π·Π΄Π΅Π».

ΠšΠΎΠΏΠΈΡ€Π°Ρ… Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ iso14651_t1_common ΠΈ ru_ru ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ НЬс във Π²Π°ΡˆΠ°Ρ‚Π° домашна дирСктория ~/.local/share/i18n/locales/ ΠΈ Π»Π΅ΠΊΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ…Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° LC_COLLATE Π² ru_ru. НовитС вСрсии Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ са напълно ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с моята вСрсия НЬс. Ако искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠΎ-стари вСрсии Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ символнитС ΠΈΠΌΠ΅Π½Π° ΠΈ мястото, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π° замяната Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°.

LC_COLLATE
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
reorder-after <U000D>
<U0020> <S0020>;<BASE>;<MIN>;<U0020> % SPACE
<U0021> <S0021>;<BASE>;<MIN>;<U0021> % EXCLAMATION MARK
<U0022> <S0022>;<BASE>;<MIN>;<U0022> % QUOTATION MARK
...
<U007D> <S007D>;<BASE>;<MIN>;<U007D> % RIGHT CURLY BRACKET
<U007E> <S007E>;<BASE>;<MIN>;<U007E> % TILDE
reorder-end
END LC_COLLATE

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Π² LC_Π˜Π”Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ¦Π˜Π― Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° сочат към Π»ΠΎΠΊΠ°Π»Π° en_MY, Π½ΠΎ Π² моя ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ²Π° Π½Π΅ бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ… Π°Ρ€Ρ…ΠΈΠ²Π° ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»ΠΈ Π»ΠΎΠΊΠ°Π»-Π°Ρ€Ρ…ΠΈΠ².

Π§Π΅ localdef Ρ€Π°Π±ΠΎΡ‚ΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° ΠΌΠΈ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° I18NPATH ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° дирСктория Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π° дирСкторията Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС посочСна ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ‚ с Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈ Ρ‡Π΅Ρ€Ρ‚ΠΈ:

$> I18NPATH=~/.local/share/i18n localedef -i ru_RU -f UTF-8 ~/.local/lib/locale/ru_MY.UTF-8

POSIX ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ Π² Π•Π—Π˜Πš ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ ΠΏΡŠΡ‚ΠΈΡ‰Π° към Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ с Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½Π° Ρ‡Π΅Ρ€Ρ‚Π°, Π½ΠΎ НЬс Π² Linux всички ΠΏΡŠΡ‚ΠΈΡ‰Π° сС броят ΠΎΡ‚ основната дирСктория, която ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° LOCPATH... Π‘Π»Π΅Π΄ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° LOCPATH=~/.local/lib/locale/ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с локализацията, Ρ‰Π΅ сС Ρ‚ΡŠΡ€ΡΡΡ‚ само Π² моята ΠΏΠ°ΠΏΠΊΠ°. Архив Π½Π° Π»ΠΎΠΊΠ°Π»Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° LOCPATH ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½.

Π•Ρ‚ΠΎ ΠΈ финалния тСст:

$> LANG=ru_MY.UTF-8 LOCPATH=~/.local/lib/locale/ sort buhg.txt
Абаканов ΠœΠΈΡ…Π°ΠΈΠ»;маляр
Ёлкина Π­Π»Π»Π°;ΠΊΡ€Π°Π½ΠΎΠ²Ρ‰ΠΈΡ†Π°
Иванов АндрСй;ΡΠ»Π΅ΡΠ°Ρ€ΡŒ
Иванова Алла;Π°Π΄Π²ΠΎΠΊΠ°Ρ‚

Π£Ρ€Π°! УспяхмС!

Някои Π³Ρ€Π΅ΡˆΠΊΠΈ

Π’Π΅Ρ‡Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅ Π·Π° сортиранСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅, поставСни Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Π½ΠΎ ΠΈΠΌΠ° ΠΎΡ‰Π΅ няколко Π²ΡŠΠΏΡ€ΠΎΡΠ° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ - Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΈ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ.

Π”Π° сС β€‹β€‹Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

И ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π²ΠΈΠ΄ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΎΡ‚ НЬс. Как стана Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към Π΄Π°Π΄Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ сортиранС Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅, сортирани ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π²ΠΈΠ΄ Π² Π»ΠΎΠΊΠ°Π» en_US.UTF-8? ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ прост: Π²ΠΈΠ΄ сравнява цСлия Π½ΠΈΠ· ΠΈ ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към сравнява само ΠΊΠ»ΡŽΡ‡Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π½ΠΈΠ·Π° Π΄ΠΎ ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΡ€Π°Π·Π΅Π½ Π·Π½Π°ΠΊ. Π’ моя ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ²Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сортиранСто Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ Π² Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ съвпада със сортиранСто Π½Π° ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅.

Π»ΠΎΠΊΠ°Π» "Β° Π‘" Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Π² сортиранитС Π½ΠΈΠ·ΠΎΠ²Π΅, Π²ΠΎΠ΄Π΅Ρ‰ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π½ΠΈΠ·ΠΎΠ²Π΅ Π΄ΠΎ ΠΏΡŠΡ€Π²ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ сортирани, Π½ΠΎ Ρ‚ΠΎΠ²Π° само маскира Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° Π΄Π°Π½Π½ΠΈ (Ρ…ΠΎΡ€Π° с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Ρ„Π°ΠΌΠΈΠ»Π½ΠΎ ΠΈΠΌΠ΅, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠΌΠ΅Π½Π°), ΠΊΠΎΠΈΡ‚ΠΎ Π±Π΅Π· ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π±ΠΈΡ…Π° Π΄Π°Π»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ обСдиняванСто Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Ако искамС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ към ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΏΠΎ пълно ΠΈΠΌΠ΅, Ρ‚ΠΎΠ³Π°Π²Π° правилният Π½Π°Ρ‡ΠΈΠ½ Π±ΠΈ Π±ΠΈΠ» ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π΄Π° посочитС раздСлитСля Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ ΠΈ Π΄Π° сортиратС ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅, Π° Π½Π΅ ΠΏΠΎ цСлия Ρ€Π΅Π΄. Π’ Ρ‚ΠΎΠ·ΠΈ случай сливанСто ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ няма Π΄Π° ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ Π»ΠΎΠΊΠ°Π»:

$> sort -t ; -k 1 buhg.txt > buhg.srt
$> sort -t ; -k 1 mail.txt > mail.srt
$> join -t ; buhg.srt mail.srt > result

УспСшно изпълнСн ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ CP1251 ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Ρ€ΡƒΠ³Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ във всички разпрСдСлСния, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΌΠΈ извСстни Linux ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π±Π΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π»ΠΎΠΊΠ°Π» en_RU.CP1251. Ако компилираният Π»ΠΎΠΊΠ°Π» Π½Π΅ бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½, Ρ‚ΠΎΠ³Π°Π²Π° Π²ΠΈΠ΄ Π±Π΅Π·ΡˆΡƒΠΌΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сравнСниС Π±Π°ΠΉΡ‚ ΠΏΠΎ Π±Π°ΠΉΡ‚, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ…ΠΌΠ΅.

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, ΠΈΠΌΠ° ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ малък ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΡΠ²ΡŠΡ€Π·Π°Π½ с Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ. Π•ΠΊΠΈΠΏ LOCPATH=/tmp Π»ΠΎΠΊΠ°Π» -a Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ списък с всички Π»ΠΎΠΊΠ°Π»ΠΈ Π² Π»ΠΎΠΊΠ°Π»-Π°Ρ€Ρ…ΠΈΠ², Π½ΠΎ с Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ LOCPATH Π·Π° всички ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ място) Ρ‚Π΅Π·ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈ.

$> LOCPATH=/tmp locale -a | grep en_US
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8

$> LC_COLLATE=en_US.UTF-8 sort --debug
sort: using β€˜en_US.UTF-8’ sorting rules

$> LOCPATH=/tmp LC_COLLATE=en_US.UTF-8 sort --debug
sort: using simple byte comparison

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Ако стС програмист, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ свикнал Π΄Π° мисли, Ρ‡Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ са колСкция ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π° Π²Π°ΡˆΠΈΡΡ‚ ΠΈΠ·Π±ΠΎΡ€ Π΅ LC_COLLATE=C.

Ако стС лингвист ΠΈΠ»ΠΈ ΡΡŠΡΡ‚Π°Π²ΠΈΡ‚Π΅Π» Π½Π° Ρ€Π΅Ρ‡Π½ΠΈΠΊ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ своя Π»ΠΎΠΊΠ°Π».

Ако стС ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Ρ‚ΠΎΠ³Π°Π²Π° просто трябва Π΄Π° свикнСтС с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ls -a ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с Ρ‚ΠΎΡ‡ΠΊΠ°, осСяни с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с Π±ΡƒΠΊΠ²Π°, ΠΈ БрСднощният ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ си Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° сортиранС Π½Π° ΠΈΠΌΠ΅Π½Π°, прСмСства Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с Ρ‚ΠΎΡ‡ΠΊΠ°, Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° списъка.

ΠŸΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅Ρ‚ΠΎ

Π”ΠΎΠΊΠ»Π°Π΄ #10 ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС Π½Π° Unicode

Π’Π΅Π³Π»Π° Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ Π² unicode.org

ICU - внСдряванС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Unicode ΠΎΡ‚ IBM.

ВСст Π·Π° сортиранС с ICU

Π’Π΅Π³Π»ΠΎ Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ ISO 14651

ОписаниС Π½Π° файловия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° ΠΌΠ°Ρ‰Π°Π±Π° ISO 14652

Дискусия Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π² НЬс

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€