2008-10-01 5 views
5

रुबी के विकास के बाद बहुत बारीकी से मैंने सीखा कि विस्तृत चरित्र एन्कोडिंग रूबी 1.9 में लागू की गई है। मेरा प्रश्न अब है: यूटीएफ 8 में सभी डेटा स्टोर करने वाले डेटाबेस से बात करने के लिए इस समय रूबी का उपयोग कैसे किया जा सकता है?रूबी और आरओआर में यूटीएफ 8 को लागू करने के लिए अब कौन से विकल्प मौजूद हैं?

पृष्ठभूमि: मैं एक नई परियोजना में शामिल हूं जहां रूबी/आरओआर कम से कम एक विकल्प है। लेकिन परियोजना को एक अंतरराष्ट्रीयकृत चरित्र सेट (यह कई देशों में फैल गया है) पर भरोसा करने की जरूरत है, अधिमानतः यूटीएफ 8।

तो आप इससे कैसे निपटते हैं? अग्रिम में धन्यवाद।

उत्तर

0

हालांकि मैंने इसका परीक्षण नहीं किया है, चरित्र-एन्कोडिंग लाइब्रेरी (वर्तमान में अल्फा में) यूटीएफ -8 और दूसरों को संभालने के लिए स्ट्रिंग क्लास में विधियों को जोड़ती है। रूबीफोर्ज पर इसका पृष्ठ here है। यह रूबी 1.8 के लिए डिज़ाइन किया गया है।

यह मेरा अनुभव है, हालांकि, रूबी 1.8 का उपयोग करके, यदि आप अपने डेटाबेस में डेटा को यूटीएफ -8 के रूप में संग्रहीत करते हैं, तो रूबी तब तक नहीं मिलेगा जब तक कि HTTP हेडर में आपका वर्ण एन्कोडिंग यूटीएफ -8 नहीं है । यह तारों पर काम करने में सक्षम नहीं हो सकता है, लेकिन यह कुछ भी तोड़ नहीं देगा। उदाहरण:

file.txt: 
¡Hola! ¿Como estás? Leí el artículo. ¡Fue muy excellente! 

मेरी खराब स्पेनिश क्षमा करें; यह यूनिकोड का सबसे अच्छा उदाहरण था जिसके साथ मैं आ सकता था।

in irb: 
str = File.read("file.txt") 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\n" 
str += "Foo is equal to bar." 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar." 
str = " " + str + " " 
    => " \302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar. " 
str.strip 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar." 

असल में, यह केवल यूटीएफ -8 को ASCII के रूप में अजीब पात्रों के साथ व्यवहार करेगा। कोड बिंदु क्रम से बाहर होने पर यह लिखित रूप से क्रमबद्ध नहीं होगा; हालांकि, यह कोड बिंदु द्वारा क्रमबद्ध होगा। उदाहरण:

"\302" <=> "\301" 
    => -1 

कितना आप, वैसे भी रेल अनुप्रयोग में डेटा पर काम करने की योजना बना रहे हैं? अधिकांश सॉर्टिंग इत्यादि आमतौर पर आपके डेटाबेस इंजन द्वारा किया जाता है।

+0

कहने के लिए खेद है, लेकिन जैसा कि सवाल में बताया गया है कि मुझे रूबी 1.9 या रूबी 2.0 एटीएम में रूचि नहीं है। डेटाबेस में पढ़ने/लिखने में कोई दिलचस्पी नहीं हो सकती है ठीक है, लेकिन, इसके बारे में क्या कहते हैं, इन डेटा को बाद में सॉर्ट करना? – Georgi

+0

SQL क्वेरी सहायता में सॉर्ट करना होगा? –

1

रूबी 1.8 स्ट्रिंग के साथ मूल संचालन के लिए यूटीएफ -8 तारों के साथ ठीक काम करता है। आपके आवेदन की ज़रूरत के आधार पर, कुछ ऑपरेशन या तो काम नहीं करेंगे या उम्मीद के अनुसार काम नहीं करेंगे।

उदाहरण के लिए:

1) तार का आकार आप बाइट्स, नहीं वर्ण दे देंगे के बाद से अनेक-बाइट समर्थन अभी तक वहाँ नहीं है। लेकिन क्या आपको पात्रों में अपने तारों के आकार को जानने की ज़रूरत है?

2) किसी चरित्र सीमा पर एक स्ट्रिंग को विभाजित नहीं करना। लेकिन क्या आपको इसकी ज़रूरत है? आदि

3) रूबी में सॉर्ट किए जाने पर सॉर्टिंग ऑर्डर फंकी होगी। क्रमबद्ध करने के लिए डीबी का उपयोग करने का सुझाव एक अच्छा विचार है।

आदि डाटाबेस से पढ़ने के बाद डेटा छँटाई के बारे में

पुन पोस्टर की टिप्पणी: जैसा कि बताया गया है, परिणाम शायद उन की अपेक्षाओं से मेल नहीं खाएगी। तो समाधान डीबी पर सॉर्ट करना है। और यह आमतौर पर तेज़ होगा, किसी भी तरह - डाटाबेस को डेटा सॉर्ट करने के लिए डिज़ाइन किया गया है।

सारांश: मेरा रूबी 1.8.6 RoR ऐप आधुनिक यूनिकोड वर्णों के साथ ठीक काम करता है और आधुनिक ब्राउज़र पर यूटीएफ -8 के रूप में संग्रहीत किया जाता है। बाएं से दाएं भाषाएं भी ठीक काम करती हैं। मुख्य मुद्दे: सुनिश्चित करें कि आपका डीबी और सभी वेब पेज यूटीएफ -8 का उपयोग करने के लिए सेट हैं। यदि आपके पास पहले से ही आपके डीबी में कुछ डेटा है, तो आपको इसे यूटीएफ -8 में बदलने के लिए एक रूपांतरण प्रक्रिया से गुज़रना होगा।

सादर,

लैरी

1

"यूनिकोड एहोय! जबकि रेल हमेशा कोई गोमांस के साथ प्रदर्शन यूनिकोड की दुकान और करने में सक्षम हो गया है, यह एक छोटे और अधिक जटिल, काट-छांट रिवर्स, या सटीक लंबाई प्राप्त करने के लिए किया गया है यूटीएफ -8 स्ट्रिंग के लिए आपको अपने आप को केसीडीईई के साथ बेवकूफ़ बनाने की ज़रूरत थी और बहुत से लोगों ने इसे काम करने के दौरान, यह उतना आसान नहीं था जितना आप उम्मीद कर सकते थे (या शायद उम्मीद भी)।

इसलिए चूंकि रूबी अगले वर्ष इस समय तक मल्टीबाइट-जागरूक नहीं होगा, रेल 1.2 सक्रिय कार्य के लिए ActiveSupport :: Multibyte प्रस्तुत करता है एच यूनिकोड तार। बाइट्स के बजाय वर्णों के साथ काम करना शुरू करने के लिए अपनी स्ट्रिंग पर वर्ण विधि को कॉल करें। "Click Here for more

संबंधित मुद्दे