2015-12-22 14 views
15

मैं एक स्ट्रिंग को एकल शब्दों/वर्णों में विभाजित करने का प्रयास कर रहा हूं, लेकिन जब इमोजी की बात आती है तो मुझे परेशानी हो रही है।इमोजी को विभाजित करना, सुरक्षित रूप से

सबसे पहले, मैं बस स्ट्रिंग विभाजित नहीं कर सकते एक खाली चरित्र का उपयोग कर, क्योंकि आम तौर पर देता है, इमोजी लंबाई> = 2.

"".split("") 
["�", "�"] 

मैं एक emoji regex कि ज्यादातर काम करता पाया है कर रहे हैं, लेकिन अब मैं देख रहा हूँ कुछ अजीब मांस रंगीन ब्लॉक। मैं उन्हें कुछ मामलों में ट्विटर पर भी दिखता हूं।

enter image description here

यहाँ एक कलम कि मांसल ब्लॉक http://codepen.io/positlabs/pen/QyEOEG?editors=011

enter image description here

अद्यतन -----------

के साथ समस्या यह दिखाता है spliddit बाहर की कोशिश कर रहा है , और मैं अभी भी त्वचा टोन पात्रों के साथ समस्या देख रहा हूँ। क्या उन्हें वापस एक साथ चिपकाने का कोई तरीका है? तो अपने इमोजी आंतरिक रूप से दो कोड इकाइयों के रूप में प्रस्तुत किया जाता है

http://codepen.io/positlabs/pen/rxLqwL?editors=001

उत्तर

11

जावास्क्रिप्ट का तार, UTF-16 के हैं:

> "\ud83d\ude0e" === "" 
true 

String.prototype.split समारोह वास्तव में UTF-16 में surrogate pairs के बारे में परवाह नहीं करता, इसलिए यह व्यक्तिगत रूप से व्यक्तिगत कोड इकाइयों को उलट देता है और आपके इमोजी को तोड़ देता है, क्योंकि जावास्क्रिप्ट स्ट्रिंग में अलग-अलग वर्णों से निपटने का कोई तरीका नहीं प्रदान करता है।

इससे निपटने का कोई आसान तरीका नहीं है। अलग-अलग कोड इकाइयों को सही तरीके से संभालने के लिए आपको spliddit जैसी लाइब्रेरी की आवश्यकता है।

मैं शब्दावली से 100% परिचित नहीं हूं, इसलिए कृपया मेरे उत्तर को आवश्यकतानुसार संपादित करें।

+0

ठीक है, स्प्लिडिट अच्छा है, लेकिन यह अभी भी त्वचा टोन वर्णों को फिर से गठबंधन करने में विफल रहता है। मैंने एक नया पेन बनाया है, और मेरा प्रश्न अपडेट कर दूंगा। –

+0

@positlabs: मेरे पास अब इसे देखने के लिए समय नहीं है, लेकिन मुझे पूरा यकीन है कि यह कोडपेन अभिनय कर रहा है। ध्वज और बाहों के अलावा सभी को हटाने का प्रयास करें और उनमें से एक को हटाने का प्रयास करें: http://codepen.io/anon/pen/NxrOoW?editors=001 – Blender

+1

@positlabs: दरअसल, यह सिर्फ क्रोम है। मेरा उपरोक्त उदाहरण सफारी और फ़ायरफ़ॉक्स दोनों के साथ काम करता है। शायद एक बग। मैं देखूंगा कि कुछ कामकाज है या नहीं। – Blender

0

spliddit वर्तमान में सही ढंग से अपने 5 अक्षरों में यह हिंदी पाठ उदाहरण के लिए विभाजित कर सकते हैं नहीं: "अनुच्छेद"

आप ग्रफीम-विभाजक पुस्तकालय की जरूरत है: https://github.com/orling/grapheme-splitter यह UAX -29 की एक पूरी कार्यान्वयन है यूनिकोड स्टैंडअर्ट और सबसे अधिक विदेशी अक्षरों को विभाजित करेगा, इमोजी कई प्रयोग मामलों में से एक है

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