2015-01-19 8 views
5

मुझे मोबाइल डिवाइस से टेक्स्ट इनपुट मिला है। इसमें इमोजी है। सी # में, मैं पाठ के रूप मेंमैं स्ट्रिंग से इमोजी वर्ण कैसे हटा सकता हूं?

Text text 

सीधे शब्दों में कहें, मैं उत्पादन पाठ

Text text 

मैं सिर्फ rejex के साथ पाठ से ऐसे सभी emojis दूर करने के लिए कोशिश कर रहा हूँ होना चाहता हूँ .. सिवाय इसके कि, मुझे यकीन नहीं है कि उस इमोजी को इसके यूनिकोड अनुक्रम में कैसे परिवर्तित करें .. मैं यह कैसे कर सकता हूं?

संपादित करें:

मैं mysql में उपयोगकर्ता इनपुट को बचाने के लिए कोशिश कर रहा हूँ। ऐसा लगता है कि MySQL UTF8 वास्तव में यूनिकोड वर्णों और right way to do it would be by changing the schema का समर्थन नहीं करता है, लेकिन मुझे नहीं लगता कि यह मेरे लिए एक विकल्प है। इसलिए मैं इसे डेटाबेस में सहेजने से पहले सभी इमोजी वर्णों को हटाने की कोशिश कर रहा हूं।

enter image description here

मैं अपने ORM और डालने क्वेरी के रूप में Nhibernate उपयोग कर रहा हूँ इस तरह दिखता है उत्पन्न:

Insert into `Content` (ContentTypeId, Comments, DateCreated) 
values (?p0, ?p1, ?p2); 
?p0 = 4 [Type: Int32 (0)]. ?p1 = 'Text text' [Type: String (20)], ?p2 = 19/01/2015 10:38:23 [Type: DateTime (0)] 

जब मैं इस कॉपी

यह प्रासंगिक स्तंभ के लिए मेरी स्कीमा है लॉग से क्वेरी करें और इसे सीधे mysql पर चलाएं, मुझे यह त्रुटि मिलती है:

1 warning(s): 1366 Incorrect string value: '\xF0\x9F\x98\x80 t...' for column 'Comments' at row 1 0.000 sec 

इसके अलावा, मैं यह एन्कोडिंग बाइट्स में परिवर्तित करने की कोशिश की है और यह वास्तव में काम नहीं करता है ..

enter image description here

+0

यह वास्तव में स्पष्ट नहीं है कि आप क्या हासिल करने का प्रयास कर रहे हैं - वर्णों को बदलने के बाद आप स्ट्रिंग मान के साथ क्या करेंगे? –

+0

@ जोन्स स्केट ने पोस्ट संपादित किया, धन्यवाद। – LocustHorde

+0

यूटीएफ -8 वास्तव में * ठीक होना चाहिए *। क्या आप अपनी स्कीमा जानकारी के साथ डेटा को सहेजने की कोशिश कर रहे हैं, इस बारे में विवरण पोस्ट कर सकते हैं? –

उत्तर

23

आप यह मानते हुए सिर्फ सभी गैर-बीएमपी वर्ण, यानी एक साथ कुछ भी निकालना चाहते हैं यू + 10000 और उच्चतर के यूनिकोड कोड पॉइंट, आप स्ट्रिंग से किसी भी यूटीएफ -16 सरोगेट कोड इकाइयों को हटाने के लिए रेगेक्स का उपयोग कर सकते हैं। उदाहरण के लिए:

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     string text = "x\U0001F310y"; 
     Console.WriteLine(text.Length); // 4 
     string result = Regex.Replace(text, @"\p{Cs}", ""); 
     Console.WriteLine(result); // 2 
    } 
} 

यहां "सीएस" "सरोगेट" के लिए यूनिकोड श्रेणी है।

ऐसा प्रतीत होता है कि Regex यूनिकोड कोड बिंदुओं के बजाय यूटीएफ -16 कोड इकाइयों के आधार पर काम करता है, अन्यथा आपको एक अलग दृष्टिकोण की आवश्यकता होगी।

ध्यान दें कि इमोजी के अलावा गैर-बीएमपी पात्र हैं, लेकिन मुझे संदेह है कि आप पाएंगे कि उन्हें स्टोर करने का प्रयास करते समय उन्हें एक ही समस्या होगी।

+0

हाय, मैंने यह सवाल करने के लिए सवाल किया कि मैंने क्या सोचा था मेरी समस्या थी .. लेकिन मैंने आपका जवाब आजमाया और यह पता चला कि मुझे वास्तव में उन्हें बदलने की ज़रूरत नहीं है .. इसलिए मैंने अब सवाल संपादित कर लिया है! http://i.imgur.com/NoQfxud.png धन्यवाद! – LocustHorde

+0

@LocustHorde: जब तक आप जानते हैं कि आप केवल उपयोगकर्ता के इनपुट के बिट्स फेंक रहे हैं ... –

+0

हाँ! यह एक अस्थायी समाधान है (उम्मीद है कि अल्पकालिक!) – LocustHorde

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