2017-05-24 50 views
3

Ruby字符串函數不支持UTF-8。例如['l', 'ł', 'm'].sort返回["l", "m", "ł"]而不是["l", "ł", "m"]如何添加UTF-8支持在Ruby中進行排序(包括字符在不影響可移植性的情況下)?

如何應該在Ruby中UTF-8字符串排序?

Sorting UTF-8 strings in RoR - 接受的答案不支持GB字符(issue open since 2015,被PR waiting opened in 2014屏蔽),等待2017-10-08未上傳。

ffi-icu answer作品有libicu系統安裝是什麼AFAIK沒有真正便攜。

+0

我知道沒有好的解決辦法的保存['unicode'(https://github.com/blackwinter/unicode)寶石。 – mudasobwa

+0

@mudasobwa在我的測試中失敗了'需要 「統一」 放[ 'L', 'L', 'M']排序{| A,B | Unicode :: strcmp(a,b)} puts ['l','ł','m']。sort {| a,b | Unicode :: strcmp_compat(a,b)}'(基於來自https://github.com/blackwinter/unicode的文檔) –

回答

1

好的解決方案是使用寶石https://github.com/twitter/twitter-cldr-rb

require 'twitter_cldr' 
collator = TwitterCldr::Collation::Collator.new 
collator.sort(['m', 'ł', 'l']) 
=> ["l", "ł", "m"] 
+0

'['m','ł','l'] .localize(:pl)。 sort.to_a'也可以工作,並且更短。此外,它明確設置本地化。 –

+0

此外,[自述文件](https://github.com/twitter/twitter-cldr-rb#requirements):「沒有外部要求」。 –

相關問題