में यूटीएफ -8 स्ट्रिंग्स को सॉर्ट करना मैं रूबी पर रूबी में यूटीएफ -8 तारों को सॉर्ट करने का 'उचित' तरीका समझने की कोशिश कर रहा हूं।RoR
मेरे आवेदन में, मेरे पास एक चुनिंदा बॉक्स है जो देशों के साथ आबादी वाला है। चूंकि मेरा आवेदन स्थानीयकृत है, प्रत्येक मौजूदा लोकेल में एक देश.आईएमएल फ़ाइल है जो देश के आईडी को उस देश के स्थानीय नाम से संबंधित करती है। मैं yml फ़ाइल में तारों को मैन्युअल रूप से सॉर्ट नहीं कर सकता क्योंकि मुझे आईडी को सभी लोकेशंस में सुसंगत होने की आवश्यकता है।
क्या मैंने किया है एक ascii_name
विधि है जो उनके ascii बराबर उच्चारण चिह्न और गैर-लैटिन वर्णों में कनवर्ट करने unidecode
मणि का उपयोग करता है बनाने के (उदाहरण के लिए, "Afeganistão" बन जाएगा "Afeganistao") उस पर तरह है, और फिर:
require 'unidecode'
class Country
def ascii_name
Unidecoder.decode(name).gsub("[?]", "").gsub(/`/, "'").strip
end
end
Country.all.sort_by(:&ascii_name)
हालांकि, इस के साथ स्पष्ट मुद्दे हैं:
- यह नहीं कर सकते हैं ठीक से तरह गैर-लैटिन स्थलों, के रूप में वहाँ एक सीधा अनुरूप लैटिन चरित्र नहीं हो सकता।
- यह एक पत्र और उस पत्र के सभी स्वराघात रूप के बीच कोई फर्क (हां, तो उदाहरण के लिए, एक और एक विनिमेय हो जाते हैं) बनाता है
किसी को भी एक बेहतर तरीका है कि मैं अपने तार को सॉर्ट कर सकता है पता है?
धन्यवाद, यह बिल्कुल सही तरह का प्लगइन था जिसे मैं ढूंढ रहा था! –
यह प्लगइन एनएफडी अपघटन http://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms पर निर्भर करता है और कुछ मामलों में विफल रहता है। सभी diacritic पात्र इस तरह से विघटित नहीं किया जा सकता है (उदाहरण के लिए पोलिश पत्र Ł नहीं कर सकते हैं)। – skalee
@skalee क्या आपके पास कोई सुझाव है कि पॉलिश वर्णों के साथ utf-8 तारों को सही ढंग से कैसे व्यवस्थित किया जाए? – mdrozdziel