Hōʻike
Ua hoʻomaka ʻia me kahi palapala pōkole i manaʻo ʻia e hoʻohui i ka ʻike kikoʻī e-mail nā limahana i loaʻa mai ka papa inoa o nā mea hoʻohana i ka leka uila, me nā kūlana limahana i loaʻa mai ka waihona ʻoihana HR. Ua lawe ʻia nā papa inoa ʻelua i nā faila Unicode UTF-8 a mālama ʻia me nā hopena laina Unix.
ʻIke maʻiʻo mail.txt
Иванов Андрей;[email protected]
ʻIke maʻiʻo buhg.txt
Иванова Алла;маляр
Ёлкина Элла;крановщица
Иванов Андрей;слесарь
Абаканов Михаил;маляр
No ka hoʻohui ʻana, ua hoʻokaʻawale ʻia nā faila e ke kauoha Unix hoʻokaʻina a waiho ʻia i ka hoʻokomo o ka papahana Unix hui, i hāʻule ʻole me ka hewa:
$> sort buhg.txt > buhg.srt
$> sort mail.txt > mail.srt
$> join buhg.srt mail.srt > result
join: buhg.srt:4: is not sorted: Иванов Андрей;слесарь
I ka nānā ʻana i ka hopena hoʻokaʻawale me kou mau maka i hōʻike ʻia, ma ka laulā, pololei ka hoʻokaʻawale ʻana, akā i ka hihia o ka hui ʻana o nā inoa kāne a me nā inoa wahine, hele mai nā wahine ma mua o nā kāne:
$> sort buhg.txt
Абаканов Михаил;маляр
Ёлкина Элла;крановщица
Иванова Алла;маляр
Иванов Андрей;слесарь
Me he mea lā i ka hoʻokaʻawale ʻana ma Unicode a i ʻole ka hōʻike ʻana o ka wahine i ka algorithm sorting. ʻO ka mea mua, ʻoiaʻiʻo, ʻoi aku ka plausible.
E hoʻopau kāua i kēia manawa hui a nānā aku hoʻokaʻina. E ho'āʻo kākou e hoʻoponopono i ka pilikia me ka hoʻohana ʻana i ka poking ʻepekema. ʻO ka mua, e hoʻololi kākou i ka wahi mai en_US maluna o ru_RU. No ka hoʻokaʻawale ʻana, ua lawa ia e hoʻonohonoho i ka ʻano hoʻololi kaiapuni LC_COLLATE, akā ʻaʻole mākou e hoʻopau manawa i nā mea liʻiliʻi:
$> LANG=ru_RU.UTF-8 sort buhg.txt
Абаканов Михаил;маляр
Ёлкина Элла;крановщица
Иванова Алла;маляр
Иванов Андрей;слесарь
ʻAʻohe mea i loli.
E ho'āʻo kākou e hoʻololi hou i nā faila i hoʻokahi-byte encoding:
$> iconv -f UTF-8 -t KOI8-R buhg.txt
| LANG=ru_RU.KOI8-R sort
| iconv -f KOI8-R -t UTF8
ʻAʻohe mea i loli hou.
ʻAʻohe mea hiki iā ʻoe ke hana, pono ʻoe e ʻimi i kahi hopena ma ka Pūnaewele. ʻAʻohe mea pololei e pili ana i nā inoa inoa Lūkini, akā aia nā nīnau e pili ana i nā mea ʻē aʻe. Eia kekahi laʻana, eia kahi pilikia:
He kūlana maʻamau ka pane ma nā wahi a pau: e hoʻohana i ka papahana programmer locale "C" a e hauʻoli ʻoe. E ho'āʻo kākou:
$> LANG=C sort buhg.txt
Ёлкина Элла;крановщица
Абаканов Михаил;маляр
Иванов Андрей;слесарь
Иванова Алла;адвокат
Ua loli kekahi mea. Ua laina pololei nā Ivanov, ʻoiai ua paheʻe ʻo Yolkina ma kahi. E hoʻi kākou i ka pilikia kumu:
$> LANG=C sort buhg.txt > buhg.srt
$> LANG=C sort mail.txt > mail.srt
$> LANG=C join buhg.srt mail.srt > result
Ua hana me ka hewa ʻole, e like me ka hoʻohiki ʻana o ka Pūnaewele. A ʻo kēia ʻoiai ʻo Yolkina i ka laina mua.
Me he mea lā ua hoʻoholo ʻia ka pilikia, akā inā wale nō, e hoʻāʻo kāua i kahi hoʻopāpā Lūkini hou - Windows CP1251:
$> iconv -f UTF-8 -t CP1251 buhg.txt
| LANG=ru_RU.CP1251 sort
| iconv -f CP1251 -t UTF8
ʻO ka hopena hoʻokaʻawale, ʻokoʻa, e hui pū me ka wahi "C", a ʻo ka laʻana holoʻokoʻa, e like me ia, holo me ka hewa ʻole. ʻO kekahi ʻano o ka mysticism.
ʻAʻole au makemake i ka mysticism i ka hoʻolālā ʻana no ka mea maʻamau ia e uhi i nā hewa. E nānā pono kākou i ka hana. hoʻokaʻina a he aha ka hopena? LC_COLLATE .
I ka hopena e ho'āʻo wau e pane i nā nīnau:
- No ke aha i koho hewa ʻia ai nā inoa wahine?
- no ke aha mai LANG=ru_RU.CP1251 ua like ia LANG=C
- no ke aha hoʻokaʻina и hui nā manaʻo like ʻole e pili ana i ke ʻano o nā kaula i hoʻokaʻawale ʻia
- no ke aha i hewa ai kaʻu mau hiʻohiʻona?
- ʻO ka hope pehea e hoʻokaʻawale ai i nā kaula e like me kou makemake
Hoʻokaʻawale ma Unicode
ʻO ka hoʻokuʻu mua ʻana ʻo ia ka hōʻike loea No. 10 i kuleana
collation - ʻO nā kaula "hoʻohālikelike" ke kumu o kēlā me kēia algorithm sorting. ʻOkoʻa paha nā algorithms ponoʻī ("bubble", "merge", "fast"), akā e hoʻohana lākou a pau i ka hoʻohālikelike ʻana o nā kaula ʻelua e hoʻoholo ai i ke ʻano o ka puka ʻana.
ʻO ka hoʻokaʻawale ʻana i nā kaula ma ka ʻōlelo kūlohelohe he pilikia paʻakikī. ʻOiai i ka hoʻopili ʻana i ka maʻalahi hoʻokahi-byte, ʻo ke ʻano o nā leka i ka pīʻāpā, ʻoiai ma kekahi ʻano ʻokoʻa mai ka ʻōlelo Pelekane Latin, ʻaʻole ia e hui hou me ke ʻano o nā helu helu i hoʻopili ʻia ai kēia mau leka. No laila ma ka huapalapala German ka leka Ö kū i waena О и P, a ma ka hoʻopili ʻana CP850 loaʻa iā ia ma waena ÿ и Ü.
Hiki iā ʻoe ke hoʻāʻo e hoʻokaʻawale mai kahi hoʻopili kikoʻī a noʻonoʻo i nā leka "kūpono" i hoʻonohonoho ʻia ma kekahi ʻano, e like me ka hana ʻana ma Unicode. Hoʻopili UTF8, UTF16 a i ʻole hoʻokahi-byte KOI8-R (inā makemake ʻia kahi ʻāpana liʻiliʻi o Unicode) e hāʻawi i nā hiʻohiʻona helu like ʻole o nā leka, akā e nānā i nā mea like o ka papa kumu.
ʻIke ʻia ʻoiai inā mākou e kūkulu i kahi papa hōʻailona mai ka wā ʻōpala, ʻaʻole hiki iā mākou ke hāʻawi i kahi kauoha hōʻailona honua iā ia. Ma nā huapalapala ʻāina like ʻole e hoʻohana ana i nā leka like, ʻokoʻa paha ke ʻano o kēia mau leka. No ka laʻana, ma ka ʻōlelo Palani Æ e manaʻo ʻia he ligature a hoʻokaʻawale ʻia e like me ke kaula AE. Ma ka ʻōlelo Norewai Æ he leka kaawale, aia ma hope Z. Ma ke ala, ma kahi o nā ligatures like Æ Aia nā leka i kākau ʻia me kekahi mau hōʻailona. No laila ma ka pī'āpā Czech aia kahi leka Ch, e kū ana ma waena H и I.
Ma waho aʻe o nā ʻokoʻa o nā alphabets, aia kekahi mau kuʻuna aupuni ʻē aʻe e hoʻoikaika i ka hoʻokaʻawale ʻana. ʻO ka mea nui, e kū mai ka nīnau: ma ke ʻano he aha nā huaʻōlelo i loaʻa i nā huaʻōlelo nui a me nā hua liʻiliʻi e ʻike ʻia ma ka puke wehewehe? Hiki ke hoʻopili ʻia ke koho ʻana i ka hoʻohana ʻana i nā kaha kikoʻī. Ma ka ʻōlelo Paniolo, hoʻohana ʻia kahi māka nīnau hoʻohuli i ka hoʻomaka o kahi ʻōlelo nīnau (Makemake ʻoe i ke mele?). I kēia hihia, ʻike ʻia ʻaʻole pono e hui pū ʻia nā huaʻōlelo nīnau i loko o kahi pūʻulu ʻokoʻa ma waho o ka pīʻāpā, akā pehea e hoʻokaʻawale i nā laina me nā kaha kaha ʻē aʻe?
ʻAʻole wau e noho i ka hoʻokaʻawale ʻana i nā kaula i nā ʻōlelo ʻokoʻa loa mai nā ʻōlelo ʻEulopa. E hoʻomaopopo ma nā ʻōlelo me ka ʻākau a i ʻole hema a i ʻole mai luna a lalo paha, mālama ʻia nā huaʻōlelo ma nā laina ma ka hoʻonohonoho heluhelu ʻana, a ʻo nā ʻōnaehana kākau non-alphabetic hoʻi i kā lākou mau ala ponoʻī e hoʻonohonoho i nā laina ma ke ʻano. . No ka laʻana, hiki ke kauoha ʻia nā hieroglyphs e ke ʻano (
Ma muli o nā hiʻohiʻona i helu ʻia ma luna nei, ua hoʻokumu ʻia nā koi kumu no ka hoʻohālikelike ʻana i nā kaula e pili ana i nā papa Unicode:
- ʻAʻole hilinaʻi ka hoʻohālikelike o nā kaula i ke kūlana o nā huapalapala i ka papa code;
- Hoʻemi ʻia nā kaʻina o nā huaʻōlelo i hoʻokahi ʻano i ke ʻano canonical (A + ua like ka pōʻai luna me Å);
- I ka hoʻohālikelike ʻana i nā kaula, e noʻonoʻo ʻia kahi ʻano i loko o ka pōʻaiapili o ke kaula a, inā pono, e hui pū me kona mau hoalauna i hoʻokahi ʻāpana o ka hoʻohālikelike (Ch ma Czech) a mahele ʻia i kekahi (Æ ma Palani);
- pono e hoʻonohonoho ʻia nā hiʻohiʻona ʻāina āpau (kāleka, ka nui/ka liʻiliʻi, nā kaha kikoʻī, ka hoʻonohonoho ʻana o nā ʻano kākau) a hiki i ka hāʻawi lima o ke kauoha (emoji);
- He mea koʻikoʻi ka hoʻohālikelike ʻaʻole wale no ka hoʻokaʻawale ʻana, akā ma nā wahi ʻē aʻe kekahi, no ka laʻana no ka wehewehe ʻana i nā pae lālani (hoʻololi i {A... z} ma ke kī);
- pono e hana koke ka hoohalike ana.
Eia kekahi, ua hoʻokumu nā mea kākau o ka hōʻike i nā waiwai hoʻohālikelike ʻaʻole pono e hilinaʻi nā mea hoʻomohala algorithm:
- ʻAʻole pono ka algorithm hoʻohālikelike i kahi pūʻulu ʻokoʻa o kēlā me kēia ʻōlelo (ka ʻōlelo Lūkini a me Ukrainian ka hapa nui o nā huaʻōlelo Cyrillic);
- ʻAʻole pono e hilinaʻi ka hoʻohālikelike i ke ʻano o nā huaʻōlelo ma nā papa Unicode;
- ʻAʻole pono ke kaumaha o ke kaula he ʻano o ke kaula, no ka mea, hiki ke loaʻa i ke kaula like ʻole i nā ʻano moʻomeheu like ʻole;
- Hiki ke loli nā paona lālani i ka hui ʻana a i ʻole ka hoʻokaʻawale ʻana (mai x < y ʻaʻole ia e hahai i kēlā xz < yz);
- ʻO nā kaula like ʻole me nā paona like ʻole i manaʻo ʻia he kūlike mai ka manaʻo o ka algorithm sorting. Hiki ke hoʻokomo i ka hoʻonohonoho hou ʻana o ia mau kaula, akā hiki ke hoʻohaʻahaʻa i ka hana;
- I ka hoʻokaʻawale pinepine ʻana, hiki ke hoʻololi ʻia nā lālani me nā kaupaona like. ʻO ka ikaika ka waiwai o kahi algorithm wehewehe kikoʻī, ʻaʻole kahi waiwai o kahi algorithm hoʻohālikelike string (e ʻike i ka paukū mua);
- Hiki ke hoʻololi ʻia nā lula i ka wā e hoʻomaʻemaʻe ai nā kuʻuna moʻomeheu.
Ua ʻōlelo ʻia ʻaʻole ʻike ka algorithm hoʻohālikelike e pili ana i nā semantics o nā kaula i hana ʻia. No laila, ʻaʻole pono e hoʻohālikelike ʻia nā kaula me nā huahelu, a ma nā papa inoa o nā inoa Pelekane ka ʻatikala (Beatles, Ka).
No ka hoʻokō ʻana i kēia mau koi a pau, ua manaʻo ʻia kahi algorithm hoʻokaʻawale papaʻaina multi-level (ʻoiaʻiʻo ʻehā-pae).
Ma mua, ua ho'ēmiʻia nā hua'ōlelo o ke kaula i keʻano canonical a hui pūʻia i nā'āpana hoʻohālikelike. Hāʻawi ʻia kēlā me kēia ʻāpana o ka hoʻohālikelike i kekahi mau kaupaona e pili ana i kekahi mau pae o ka hoʻohālikelike. ʻO nā paona o nā ʻāpana hoʻohālikelike he mau mea ia o nā pūʻulu i kauoha ʻia (ma kēia hihia, integers) hiki ke hoʻohālikelike ʻia no ka nui a i ʻole ka liʻiliʻi. Manaʻo kūikawā HALAWAIA (0x0) 'o ia ho'i, ma ka pae ho'ohālikelike e pili ana, 'a'ole pili kēia 'āpana i ka ho'ohālikelike. Hiki ke hana hou ʻia ka hoʻohālikelike ʻana o nā kaula i nā manawa he nui, me ka hoʻohana ʻana i nā paona o nā pae kūpono. Ma kēlā me kēia pae, hoʻohālikelike ʻia nā paona o nā ʻāpana hoʻohālikelike o nā lālani ʻelua me kekahi.
I nā hoʻokō like ʻole o ka algorithm no nā kuʻuna ʻāina ʻē aʻe, ʻokoʻa paha nā waiwai o nā coefficients, akā ʻo ka maʻamau Unicode e loaʻa i kahi papa o nā kaupaona - "Paʻamau Unicode Collation Element Table" (DUCET). Makemake wau e hoʻomaopopo i ka hoʻonohonoho ʻana i ka loli LC_COLLATE He hōʻailona maoli ia o ke koho ʻana i ka papa kaumaha ma ka hana hoʻohālikelike string.
Kaumaha paona DUCET ua hoʻonohonoho ʻia penei:
- ma ka pae mua, ua hoemi ia na leka a pau i ka hihia hookahi, ua hooleiia na diacritics, ua malama ole ia na kaha kaha (aole a pau);
- ma ka pae ʻelua, mālama ʻia nā diacritics wale nō;
- ma ke kolu o ka pae, he hihia wale no ka noonoo;
- ma ka pae ʻehā, mālama ʻia nā kaha kikoʻī.
Hoʻohālikelike ʻia ka hoʻohālikelike ʻana i kekahi mau ala: ʻo ka mua, ua hoʻohālikelike ʻia nā coefficient o ka pae mua; inā pili nā paona, a laila e hoʻohālikelike hou ʻia me nā paona pae ʻelua; alaila, o ke kolu a me ka ha.
Hoʻopau ka hoʻohālikelike inā loaʻa i nā lālani nā ʻāpana like o ka hoʻohālikelike me nā paona like ʻole. Ua manaʻo ʻia nā lālani i like ke kaupaona ʻana ma nā pae ʻehā.
Ua hāʻawi kēia algorithm (me kahi hui o nā kikoʻī loea hou) i ka inoa e hōʻike i ka No. 10 - "Unicode Collation Algorithm" (ACU).
ʻO kēia kahi e maʻalahi iki ai ke ʻano o kā mākou hiʻohiʻona. He mea maikaʻi e hoʻohālikelike me ka maʻamau Unicode.
E ho'āʻo i nā hoʻokō ACU aia kahi kūikawā
E nānā pono ana i ka hoʻokaʻawale ʻia ʻana o nā lālani e like me DUCET He mea paʻakikī loa ia, akā, pōmaikaʻi no mākou, aia kahi hoʻokō hoʻohālike o ka waihona no ka hana ʻana me Unicode - "
Ma ka pūnaewele o kēia waihona, i kūkulu ʻia ma IBM, aia nā ʻaoʻao demo, me
Абаканов Михаил;маляр
Ёлкина Элла;крановщица
Иванов Андрей;слесарь
Иванова Алла;адвокат
Ma ke ala, ma ka pūnaewele ICU Hiki iā ʻoe ke ʻike i ka wehewehe ʻana i ka algorithm hoʻohālikelike i ka wā e hoʻoponopono ai i nā kaha kaha. Ma na laana
Ua kōkua ʻo Unicode iā mākou, akā e ʻimi i nā kumu no ka ʻano ʻano ʻē hoʻokaʻina в Linux pono e hele i kahi ʻē aʻe.
Hoʻokaʻawale i ka glibc
Nānā wikiwiki i nā code kumu waiwai hoʻokaʻina mai Nā mea hoʻohana kumu GNU i hōʻike ʻia i loko o ka pono ponoʻī, iho ka localization i ka paʻi ʻana i ka waiwai o kēia manawa o ka loli LC_COLLATE ke holo nei ma ke ʻano debug:
$ sort --debug buhg.txt > buhg.srt
sort: using ‘en_US.UTF8’ sorting rules
Hana ʻia nā hoʻohālikelike string me ka hoʻohana ʻana i ka hana maʻamau strcoll, 'o ia ho'i, aia nā mea hoihoi i loko o ka waihona Glibc.
maluna o wiki ka papahana Glibc hoʻolaʻa i ka hoʻohālikelike aho
ʻO ka ʻike hoihoi loa ma wiki he loulou i
I kēia manawa ua loaʻa iā mākou ka ʻike āpau e pili ana i ka algorithm a me nā papa kōkua, hiki iā mākou ke hoʻi i ka pilikia kumu a hoʻomaopopo i ke ʻano o ka hoʻonohonoho pono ʻana i nā kaula i ka wahi Lūkini.
ISO 14651 / 14652
Source code o ka papaʻaina a mākou e hoihoi nei CTT ma ka hapa nui o na mahele Linux aia ma ka palapala /usr/share/i18n/locales/. Aia ka papaʻaina i loko o ka faila iso14651_t1_maʻamau. A laila ʻo kēia ka faila kuhikuhi kope iso14651_t1_common komo i loko o ka waihona iso14651_t1, ʻo ia hoʻi, ua hoʻokomo ʻia i loko o nā faila aupuni, me en_US и ru_RU. Ma ka hapa nui o na mahele Linux Aia nā faila kumu a pau i ka hoʻonohonoho kumu, akā inā ʻaʻole lākou, pono ʻoe e hoʻokomo i kahi pūʻolo hou mai ka hāʻawi ʻana.
Hoʻolālā waihona iso14651_t1 Me he mea lā, ʻaʻole ʻike ʻia nā lula no ke kūkulu ʻana i nā inoa, akā inā ʻoe e nānā, maʻalahi nā mea a pau. Hōʻike ʻia ke ʻano ma ka maʻamau ISO 14652, hiki ke hoʻoiho ʻia kahi kope mai ka pūnaewele
Penei ke ano o ka waihona:
Ma ka maʻamau, hoʻohana ʻia ke ʻano he ʻano pakele, a ʻo ka hopena o ka laina ma hope o ka # ʻano he manaʻo. Hiki ke ho'ākāka hou ʻia nā hōʻailona ʻelua, ʻo ia ka mea i hana ʻia ma ka mana hou o ka papaʻaina:
escape_char /
comment_char %
Loaʻa i ka faila nā hōʻailona ma ke ʻano ai ole ia, (kahi x - huahelu hexadecimal). ʻO kēia ka hōʻike hexadecimal o nā helu helu Unicode ma ka hoʻopili UCS-4 (UTF-32). ʻO nā mea ʻē aʻe āpau i nā bracket angle (me , <2> a me nā mea like) i manaʻo ʻia he mau kaula maʻalahi i liʻiliʻi ka manaʻo ma waho o ka pōʻaiapili.
Nā laina LC_COLLATE haʻi mai iā mākou e hoʻomaka ana ka ʻikepili e wehewehe ana i ka hoʻohālikelike ʻana o nā kaula.
ʻO ka mea mua, ua kuhikuhi ʻia nā inoa no nā kaupaona ma ka papa hoʻohālikelike a me nā inoa no nā hui hōʻailona. Ma ka ʻōlelo maʻamau, pili nā ʻano inoa ʻelua i nā hui like ʻole, akā i ka faila maoli ua hui pū ʻia lākou. Ua kuhikuhi ʻia nā inoa o nā paona e ka huaʻōlelo hōʻailona hōʻiliʻili (ʻano hoʻohālikelike) no ka mea i ka hoʻohālikelike ʻana, e manaʻo ʻia nā huaʻōlelo Unicode i loaʻa nā paona like.
Ma kahi o 900 laina ka lōʻihi o ka pauku ma ka hoʻoponopono ʻana i ka faila. Ua huki au i nā hiʻohiʻona mai nā wahi he nui e hōʻike i ka manaʻo ʻole o nā inoa a me nā ʻano syntax.
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>"
- hōʻailona hōʻuluʻulu log i kahi kaula OSMANYA ma ka papa inoa o na unahi
- hōʻailona hōʻuluʻulu .. hoʻopaʻa inoa i ke kaʻina o nā inoa me kahi prefix S a me hexadecimal suffix helu mai 1D000 i luna 1D35F.
- FFFF в hōʻailona hōʻuluʻulu me he mea la i ka huina nui unsigned in hexadecimal, aka he inoa wale nō ke ʻano like
- inoa 'o ia ho'i ka helu helu ma ka ho'opili 'ana UCS-4
- hui-hui mai "" hoʻopaʻa inoa hou no nā kiko Unicode.
I ka manawa i wehewehe ʻia ai nā inoa o nā kaupaona, ʻike ʻia nā kaupaona maoli. No ka mea, ʻoi aku ka nui ma mua o ka liʻiliʻi pili i ka hoʻohālikelike ʻana, ua hoʻoholo ʻia nā kaupaona e kahi papa inoa maʻalahi. Hoʻopaʻa mua ʻia nā paona "māmā", a laila ʻoi aku ka "kaumaha". E hoʻomanaʻo wau iā ʻoe ua hāʻawi ʻia kēlā me kēia ʻano Unicode i ʻehā mau kaupaona like ʻole. Maʻaneʻi ua hoʻohuiʻia lākou i hoʻokahi kaʻina kauoha. Ma ke kumumanaʻo, hiki ke hoʻohana ʻia kekahi inoa hōʻailona ma kekahi o nā pae ʻehā, akā hōʻike nā manaʻo e hoʻokaʻawale nā mea hoʻomohala i nā inoa i nā pae.
% 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
ʻO ka hope, ʻo ka pākaukau kaumaha maoli.
Hoʻopili ʻia ka ʻāpana kaupaona i nā laina huaʻōlelo kauoha_hoomaka и kauoha_hope. Nā koho keu kauoha_hoomaka E hoʻoholo i kahi e nānā ʻia ai nā lālani i kēlā me kēia pae o ka hoʻohālikelike. ʻO ka hoʻonohonoho paʻamau i mua. Aia i loko o ke kino o ka ʻāpana nā laina i loaʻa ka code hōʻailona a me kona mau kaupaona ʻehā. Hiki ke hōʻike ʻia ke code character e ke ʻano ponoʻī, kahi helu code, a i ʻole kahi inoa hōʻailona i wehewehe mua ʻia. Hiki ke hāʻawi ʻia nā paona i nā inoa hōʻailona, nā helu helu, a i ʻole nā hōʻailona ponoʻī. Inā hoʻohana ʻia nā helu helu a i ʻole nā huaʻōlelo, ua like ko lākou kaumaha me ka waiwai helu o ke kiko code (kūlana ma ka papa Unicode). Manaʻo ʻia nā huaʻōlelo ʻaʻole i hōʻike ʻia (e like me kaʻu e hoʻomaopopo ai) i hāʻawi ʻia i ka papa me ke kaumaha mua e kūlike i ke kūlana ma ka papa Unicode. Waiwai kaumaha kūikawā MAKAHI 'o ia ho'i, 'a'ole mālama 'ia ka hō'ailona ma ka pae kūpono o ka ho'ohālikelike.
No ka hōʻike ʻana i ke ʻano o nā unahi, ua koho au i ʻekolu mau ʻāpana ʻike maopopo loa:
- nā huapalapala i mālama ʻole ʻia
- nā hōʻailona like me ka helu ʻekolu ma nā pae mua ʻelua
- ka hoʻomaka ʻana o ka huapalapala Cyrillic, ʻaʻole i loaʻa nā diacritics, a no laila ua hoʻokaʻawale ʻia e ka pae mua a me ke kolu.
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
I kēia manawa hiki iā ʻoe ke hoʻi i ka hoʻokaʻawale ʻana i nā hiʻohiʻona mai ka hoʻomaka ʻana o ka ʻatikala. Aia ka hoʻohālua ma kēia ʻāpana o ka papa kaupaona:
<U0020> IGNORE;IGNORE;IGNORE;<U0020> % SPACE
<U0021> IGNORE;IGNORE;IGNORE;<U0021> % EXCLAMATION MARK
<U0022> IGNORE;IGNORE;IGNORE;<U0022> % QUOTATION MARK
...
Hiki ke ʻike ʻia ma kēia pākaukau nā kaha kikoʻī mai ka papa ʻaina ASCII (me ka hakahaka) ʻaneʻane nānā ʻole i ka wā e hoʻohālikelike ai i nā kaula. ʻO nā mea ʻokoʻa wale nō nā laina e pili ana i nā mea āpau koe wale nō nā kaha kiko i loaʻa i nā kūlana kūlike. ʻO nā laina mai kaʻu hiʻohiʻona (ma hope o ka wehe ʻana) no ka algorithm hoʻohālikelike e like me kēia:
АбакановМихаилмаляр
ЁлкинаЭллакрановщица
ИвановаАлламаляр
ИвановАндрейслесарь
Ke noʻonoʻo nei i ka papa o nā unahi, hele mai nā leka nui ma ka Lūkini ma hope o nā leka liʻiliʻi (ma ke kolu o ka pae kaumaha aku ), pololei loa ka hoʻokaʻawale ʻana.
Ke hoʻonohonoho i kahi loli LC_COLLATE=C hoʻouka ʻia kahi papa ʻaina kūikawā e hōʻike ana i ka hoʻohālikelike byte-by-byte
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'
};
No ka mea ma Unicode ka helu helu Ё ma mua o A, ua hoʻokaʻawale ʻia nā kaula e like me ia.
Nā kikokikona a me nā papa helu binary
ʻIke loa, he hana maʻamau ka hoʻohālikelike string, a me ka pākaukau papa CTT he kaʻina hana kumu kūʻai. No ka hoʻonui ʻana i ke komo ʻana i ka papaʻaina, ua hoʻohui ʻia i loko o ke ʻano binary me ke kauoha localdef.
hui localdef ʻae ʻia ma ke ʻano he ʻāpana i kahi faila me kahi papa o nā ʻano ʻāina (koho -i), kahi i hōʻike ʻia ai nā huaʻōlelo a pau e nā kiko Unicode, a me kahi faila o ka pilina ma waena o nā kiko Unicode a me nā huaʻōlelo o kahi hoʻopili kikoʻī (koho. -f). Ma muli o ka hana, hana ʻia nā faila binary no ka wahi me ka inoa i kuhikuhi ʻia ma ka ʻāpana hope.
ʻO Glibc Kākoʻo ʻia ʻelua ʻano faila binary: "kuʻuna" a me "modern".
ʻO ke ʻano kuʻuna, ʻo ia ka inoa o ka wahi ka inoa o ka subdirectory in /usr/lib/locale/. Mālama kēia subdirectory i nā faila binary LC_COLLATE, LC_CTYPE, LC_TIME a laila. waihona LC_IDENTIFICATION Loaʻa ka inoa kūhelu o ka wahi (ʻokoʻa paha me ka inoa papa kuhikuhi) a me nā manaʻo.
ʻO ka hōʻano hou e pili ana i ka mālama ʻana i nā wahi āpau i kahi waihona hoʻokahi /usr/lib/locale/locale-archive, i palapala ʻia i ka hoʻomanaʻo virtual o nā kaʻina hana a pau e hoʻohana ana Glibc. ʻO ka inoa kūloko i ke ʻano hou e pili ana i kekahi canonization - ʻo nā helu a me nā leka i hoʻemi ʻia i ka helu haʻahaʻa e waiho ʻia ma nā inoa hoʻopā. No laila ru_RU.KOI8-R, e mālama ʻia e like me ru_RU.koi8r.
Huli ʻia nā faila hoʻokomo ma ka papa kuhikuhi o kēia manawa, a me nā papa kuhikuhi /usr/share/i18n/locales/ и /usr/share/i18n/charmaps/ no nā faila CTT a me ka hoʻopili ʻana i nā faila, kēlā me kēia.
Eia kekahi laʻana, ke kauoha
localedef -i ru_RU -f MAC-CYRILLIC ru_RU.MAC-CYRILLIC
e hōʻuluʻulu i ka faila /usr/share/i18n/locales/ru_RU me ka hoʻohana ʻana i ka faila encoding /usr/share/i18n/charmaps/MAC-CYRILLIC.gz a mālama i ka hopena i loko /usr/lib/locale/locale-archive malalo o ka inoa ru_RU.maccyrillic
Inā hoʻonoho ʻoe i ka hoʻololi LANG = en_US.UTF-8 alaila Glibc e ʻimi i nā binaries locale ma ke ʻano o nā faila a me nā papa kuhikuhi:
/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/
Inā loaʻa kahi ʻāina ma nā ʻano kuʻuna a me nā ʻano hou, a laila hāʻawi ʻia ka mea nui i ka mea hou.
Hiki iā ʻoe ke nānā i ka papa inoa o nā wahi i hōʻuluʻulu ʻia me ke kauoha kahi -a.
Ke hoʻomākaukau nei i kāu papa hoʻohālikelike
I kēia manawa, me ka ʻike, hiki iā ʻoe ke hana i kāu papa hoʻohālikelike string kūpono. Pono kēia papa e hoʻohālikelike pono i nā leka Lūkini, me ka leka Ё, a ma ka manawa like e noʻonoʻo i nā kaha kaha e like me ka papa. ASCII.
ʻO ke kaʻina hana o ka hoʻomākaukau ʻana i kāu papa hoʻonohonoho ponoʻī he ʻelua mau ʻanuʻu: hoʻoponopono i ka papa paona a hoʻohui ʻia i loko o ke ʻano binary me ke kauoha. localdef.
I mea e hoʻoponopono ʻia ka papa hoʻohālikelike me nā koina hoʻoponopono liʻiliʻi, ma ke ʻano ISO 14652 Hāʻawi ʻia nā ʻāpana no ka hoʻoponopono ʻana i nā paona o kahi papaʻaina e kū nei. Hoʻomaka ka ʻāpana me kahi huaʻōlelo hooponopono hou a e hōʻike ana i ke kūlana ma hope o ka hana ʻana i ke pani. Hoʻopau ka ʻāpana me ka laina hoʻoponopono hou. Inā pono e hoʻoponopono i kekahi mau ʻāpana o ka papaʻaina, a laila hana ʻia kahi ʻāpana no kēlā me kēia ʻāpana.
Ua kope au i nā mana hou o nā faila iso14651_t1_maʻamau и ru_RU mai ka waihona Glibc i koʻu papa kuhikuhi home ~/.local/share/i18n/locales/ a hoʻoponopono iki i ka ʻāpana LC_COLLATE в ru_RU. Ua kūpono piha nā mana hou o nā faila me kaʻu mana Glibc. Inā makemake ʻoe e hoʻohana i nā mana kahiko o nā faila, pono ʻoe e hoʻololi i nā inoa hōʻailona a me kahi kahi e hoʻomaka ai ke pani i ka papaʻaina.
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
ʻOiaʻiʻo, pono e hoʻololi i nā kahua i loko LC_IDENTIFICATION i kuhikuhi ai lakou i ka wahi ru_MY, akā i kaʻu hiʻohiʻona ʻaʻole koi ʻia kēia, no ka mea ua kāpae wau i ka waihona mai ka ʻimi ʻana i nā wahi waihona waihona.
ia localdef ua hana pū me nā faila i loko o kaʻu waihona ma o ka loli I18NPATH Hiki iā ʻoe ke hoʻohui i kahi papa kuhikuhi hou e ʻimi ai i nā faila hoʻokomo, a hiki ke kuhikuhi ʻia ka papa kuhikuhi no ka mālama ʻana i nā faila binary ma ke ʻano he ala me nā ʻōpala:
$> I18NPATH=~/.local/share/i18n localedef -i ru_RU -f UTF-8 ~/.local/lib/locale/ru_MY.UTF-8
POSIX manaʻo i loko ʻŌlelo hiki iā ʻoe ke kākau i nā ala pololei i nā papa kuhikuhi me nā faila kūloko, e hoʻomaka me kahi slash i mua, akā Glibc в Linux helu ʻia nā ala āpau mai ka papa kuhikuhi kumu, hiki ke hoʻopau ʻia ma o kahi loli LOCPATH. Ma hope o ke kau ʻana LOCPATH=~/.local/lib/locale/ ʻO nā faila āpau e pili ana i ka localization e ʻimi wale ʻia ma kaʻu waihona. Waihona o nā wahi me ka hoʻonohonoho hoʻololi LOCPATH mālama ʻole ʻia.
Eia ka ho'āʻo koʻikoʻi:
$> LANG=ru_MY.UTF-8 LOCPATH=~/.local/lib/locale/ sort buhg.txt
Абаканов Михаил;маляр
Ёлкина Элла;крановщица
Иванов Андрей;слесарь
Иванова Алла;адвокат
Hooray! Ua hana mākou!
Buke hana
Ua pane mua wau i nā nīnau e pili ana i ka hoʻokaʻawale ʻana i ke kaula i ka hoʻomaka ʻana, akā aia kekahi mau nīnau e pili ana i nā hewa - ʻike ʻia a ʻike ʻole ʻia.
E hoʻi kāua i ka pilikia kumu.
A me ka papahana hoʻokaʻina a me ka papahana hui e hoʻohana i nā hana hoʻohālikelike kaula like mai Glibc. Pehea i hiki mai ai hui hāʻawi i kahi kuhi hewa ma nā lālani i hoʻokaʻawale ʻia e ke kauoha hoʻokaʻina ma ka ʻāina en_US.UTF-8? He maʻalahi ka pane: hoʻokaʻina hoʻohālikelike i ke kaula holoʻokoʻa, a hui hoʻohālikelike wale i ke kī, ʻo ia ka hoʻomaka ʻana o ke kaula a hiki i ke ʻano keʻokeʻo mua. Ma kaʻu laʻana, ua loaʻa kēia i kahi memo hewa no ka mea ʻaʻole i kūlike ka ʻano o nā huaʻōlelo mua i nā laina me ka hoʻokaʻawale ʻana i nā laina piha.
Kaulana "C" e hōʻoiaʻiʻo ana e hoʻokaʻawale ʻia nā substrings mua a hiki i ka hakahaka mua, akā e uhi wale kēia i ka hewa. Hiki ke koho i ka ʻikepili (nā poʻe me nā inoa inoa like ʻole, akā nā inoa mua ʻē aʻe) i hāʻawi ʻia me ka ʻole o ka memo hewa, e hāʻawi i kahi hopena hoʻohui faila hewa. Inā makemake mākou hui hoʻohui ʻia nā laina faila ma ka inoa piha, a laila ʻo ke ala kūpono e wehewehe pono i ka mea hoʻokaʻawale kahua a hoʻokaʻawale ʻia e ke kī kī, ʻaʻole ma ka laina holoʻokoʻa. I kēia hihia, e holo pololei ka hui ʻana a ʻaʻohe hewa ma kekahi wahi:
$> sort -t ; -k 1 buhg.txt > buhg.srt
$> sort -t ; -k 1 mail.txt > mail.srt
$> join -t ; buhg.srt mail.srt > result
Ua hoʻokō maikaʻi ʻia ka laʻana ma ka hoʻopā ʻana CP1251 aia kekahi hewa. ʻO ka mea ʻoiaʻiʻo ma nā māhele a pau i ʻike iaʻu Linux Nalo nā pūʻolo wahi i hōʻuluʻulu ʻia ru_RU.CP1251. Inā ʻaʻole ʻike ʻia ka wahi i hōʻuluʻulu ʻia, a laila hoʻokaʻina hoʻohana mālie i ka hoʻohālikelike byte-by-byte, ʻo ia ka mea a mākou i ʻike ai.
Ma ke ala, aia kekahi glitch liʻiliʻi e pili ana i ka hiki ʻole o nā wahi i hōʻuluʻulu ʻia. Hui LOCPATH=/tmp wahi -a e hāʻawi i kahi papa inoa o nā wahi āpau i loko waihona waihona, akā me ka hoʻonohonoho hoʻololi LOCPATH no nā polokalamu āpau (me ka hapa nui kūloko) ʻaʻole e loaʻa kēia mau wahi.
$> 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
hopena
Inā he polokalamu ʻoe i maʻa i ka noʻonoʻo ʻana ʻo nā kaula he set of bytes, a laila kāu koho LC_COLLATE=C.
Inā he kanaka linguist a mea hoʻopili puke wehewehe ʻōlelo paha ʻoe, a laila ʻoi aku ka maikaʻi o ka hōʻuluʻulu ʻana ma kou wahi.
Inā he mea hoʻohana maʻalahi ʻoe, a laila pono ʻoe e maʻa i ka ʻoiaʻiʻo o ke kauoha ls-a nā faila e hoʻomaka ana me kahi kiko i hui pū ʻia me nā faila e hoʻomaka ana me kahi leka, a Luna aumoe, e hoʻohana ana i kāna mau hana i loko e hoʻokaʻawale i nā inoa, kau i nā faila e hoʻomaka me kahi kiko ma ka hoʻomaka o ka papa inoa.
kūmole
Source: www.habr.com