2011-08-24 14 views
10

पर एन्कोड नहीं किए जा सकते हैं मेरे पास UITextView है जिसे मैं messageField पर कॉल करता हूं। उस messageField के भीतर डेटा POST है-JSON प्रारूप में सर्वर के लिए। जब उपयोगकर्ता इमोजी चरित्र टाइप करता है तो मुझे डेटा को JSON पर एन्कोड करने में समस्या आ रही है। मैं सोच रहा हूं कि इमोजी यूनिकोड एन्कोडिंग का उपयोग करता है।इमोजी वर्ण JSON

क्या कोई इमोजी चरित्र जेएसओएन को एन्कोड करने का कोई तरीका है? और जेएसओएन से इमोजी को वापस UILabel में प्रदर्शित करने के लिए?

+0

मैं ios में डिकोड इमोजी जो php पक्ष में एन्कोड किया गया है बदल सकते हैं? यदि हाँ, मैं दोनों तरफ से यह कैसे कर सकता हूं। मैं कोशिश करता हूं लेकिन केवल एक ही आकार में एन्कोड और डीकोड नहीं कर रहा हूं। अन्यथा काम नहीं कर रहा :(तो कृपया मुझे कुछ समाधान दें। उन्नत में धन्यवाद। – ilesh

उत्तर

10

संपादित करें - 2016/03/03कृपया ध्यान दें, इस सवाल का जवाब 2011 में लिखा गया था और अब किसी भी अधिक प्रासंगिक हो सकता है।

इमोजी वर्ण विशिष्ट यूनिकोड कोड बिंदुओं को प्रस्तुत करने के लिए उपयोग किए जाने वाले एक विशिष्ट फ़ॉन्ट हैं। आईओएस इमोजी-विशिष्ट कोड बिंदुओं के लिए यूनिकोड निजी उपयोग क्षेत्रों में से एक का उपयोग करता है। इन "पात्रों" को इमोजी के रूप में देखने का एकमात्र तरीका एक इमोजी फ़ॉन्ट उपलब्ध है, साथ ही एक मशीन जो जानता है कि डिफॉल्ट टेक्स्ट फ़ॉन्ट (जैसे हेलवेटिका) से इमोजी फ़ॉन्ट में कैसे स्विच करना है।

मुझे नहीं पता कि आप अपने JSON को एन्कोड कर रहे हैं, लेकिन चूंकि इमोजी सिर्फ टेक्स्ट हैं, तब तक कोई समस्या नहीं होनी चाहिए जब तक कि आप यूनिकोड-अनुकूल प्रारूप जैसे टेक्स्ट को यूटीएफ -8 या यूटीएफ- 16। आप इसे सर्वर-साइड या डेटाबेस में नहीं देख पाएंगे (जब तक कि आप पिछले पूर्वापेक्षाएँ वाले डेटा को नहीं देखते) लेकिन आप उसी कच्चे बाइट को वापस भेजने में सक्षम होना चाहिए और इसे वही देखना चाहिए।

यहाँ है कि एक छोटे से अधिक मदद कर सकता है कुछ पदों है:

+0

हाय। टिप्पणी के लिए धन्यवाद। इससे बहुत मदद मिली :) मेरी एकमात्र समस्या अब बाकी है जब मैं वेब सर्वर पर जेसन डेटा पोस्ट करता हूं, और कोशिश करने का प्रयास करता हूं $ postData = file_get_contents ("php: // input") का उपयोग कर डेटा; मैं डेटा प्राप्त नहीं कर सकता। लेकिन जब मैं डमी डेटा का उपयोग करता हूं, $ postData = '{"body": "अक्षर यहाँ "}'; मैं डेटाबेस में डेटा को सफलतापूर्वक सम्मिलित कर सकता हूं और उन्हें डिवाइस में पढ़ सकता हूं। – janusbalatbat

+0

क्या मैं आईओएस में डीकोड इमोजी बदल सकता हूं जो PHP पक्ष में एन्कोड किया गया है? यदि हाँ, मैं दोनों तरफ से यह कैसे कर सकता हूं। मैं कोशिश करता हूं लेकिन केवल एक ही आकार में एन्कोड और डीकोड नहीं कर रहा हूं। अन्यथा काम नहीं कर रहा :(तो कृपया मुझे कुछ समाधान दें। उन्नत में धन्यवाद। – ilesh

+0

यह टिप्पणी वास्तव में एक प्रश्न होना चाहिए –

1

एक बात इमोजी के साथ के बारे में पता होना करने के लिए - अगर आपकी json एनकोडर सेट किया गया है ASCII आउटपुट का उत्पादन करने के लिए (यानी \ u < 4 हेक्स अंक> चरित्र प्रारूप का उपयोग करके), कुछ इमोजी वर्ण तोड़ेंगे क्योंकि वें आई दो से अधिक बाइट्स का उपयोग करता है और इस प्रकार 4 हेक्स अंकों की अनुमति में फिट नहीं होता है।

इसलिए उदाहरण के लिए अजगर में, उपयोग करने के लिए सुनिश्चित हो:

json.dumps(<object containing emoji strings>, ensure_ascii=False) 
4

मैं एक ही समस्या थी, घंटे के लिए खुदाई के बाद और अंत में इस जवाब यह है कि मेरे लिए काम करता पाया: आप तो https://stackoverflow.com/a/8339255/1090945

रेलवे का उपयोग आपके सर्वर के रूप में कर रहे हैं, यह सब आपको करने की ज़रूरत है। आईओएस/एक्सकोड में कुछ भी करने की ज़रूरत नहीं है, बस सर्वर पर यूटीएफ 8/16 एन्कोडिंग सामान किए बिना एनएसएसटींग पास करें।

पोस्टगेरे कोड को सही तरीके से स्टोर करता है, यह तब होता है जब आप अपने आईओएस क्लाइंट को जेसन प्रतिक्रिया भेजते हैं, मानते हैं कि आप जेसन प्रस्तुत करते हैं: @ मैसेज, जेसन एन्कोडिंग में समस्या है।

आप के रूप में साधारण परीक्षण कार्य करके अपना रेल कंसोल में json एन्कोडिंग समस्या हो रही है कि क्या आप परीक्षण कर सकते हैं:

परीक्षण = { "स्माइली" => "यू {1f604}"} परीक्षण।to_json

अगर यह बाहर प्रिंट "{\" स्माइली \ ": \" \ uf604 \ "}" (नोटिस 1 खो दिया है), तो आप इस समस्या है। और लिंक से पैच इसे ठीक कर देगा।

+0

बहुत बहुत धन्यवाद। हाँ मैं लापता व्यक्ति को भी देख रहा था। अजीब। वैसे भी, वह बंदर पैच मेरे लिए काम करता था। धन्यवाद –

28

मैं इमोजी चरित्र एन्कोड करने के लिए

NSString *uniText = [NSString stringWithUTF8String:[textview.text UTF8String]]; 
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding] ; 

और नीचे दिए गए कोड को डिकोड और प्रदर्शित करने के लिए UILabel में

const char *jsonString = [body UTF8String]; 
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)]; 
NSString *goodMsg = [[NSString alloc] initWithData:jsonData encoding:NSNonLossyASCIIStringEncoding]; 
+0

हां यह मेरे लिए मदद है ... पुश अधिसूचना के माध्यम से इमोजी चरित्र भेजने और प्राप्त करने के लिए .... – Pradeep

+0

क्या मैं आईओएस में डीकोड इमोजी बदल सकता हूं जो PHP पक्ष में एन्कोड किया गया है? यदि हां, तो मैं दोनों तरफ से यह कैसे कर सकता हूं ।मैं कोशिश करता हूं लेकिन केवल एक ही आकार में एन्कोड और डीकोड नहीं कर रहा हूं। अन्यथा काम नहीं कर रहा :(तो मुझे कुछ समाधान दे कृपया उन्नत धन्यवाद – ilesh

+0

@ilesh:।। यह एन्कोडिंग आप PHP पक्ष पर कर रहे हैं के प्रकार पर निर्भर – Karun

4

धन्यवाद @Karu, आपकी प्रतिक्रिया का संपादन, मैं इस कोड का उपयोग नीचे दिए गए कोड का उपयोग करें:

सर्वर से भेजने के लिए एनकोड:

NSString *uniText = [NSString stringWithUTF8String:[text_to_send UTF8String]]; 

NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 

NSString *str = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding]; 

डिकोड प्राप्त करते हैं और दिखा इमोजी पाठ करने के लिए:

NSData *newdata = [received_string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

NSString *mystring = [[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding]; 

NSString *finalString= @""; 

if (mystring) { 
    finalString = mystring; 
}else{ 
    finalString = received_string; 
} 

आईओएस 9

1

अद्यतन स्विफ्ट & उद्देश्य सी

आप JSON के माध्यम से एक इमोजी आइटम भेज भेजना चाहते हैं पर सही चलाते हैं तो यह कोड, सबसे पहले आपको यूबीएफ -8 में डीबी बनाने की आवश्यकता है और आईओएस में आपको NSUTF8StringEncoding के लिए एन्कोड करने की आवश्यकता है। तो सबसे पहले सुनिश्चित करें कि आपका डीबी यूटीएफ -8 के लिए तैयार है, फिर NSUTF8StringEncoding पर पैरामीटर एन्कोड करें। इसलिए संदेश भेजते समय नमूना अनुरोध है।

let post:NSString = parameters! 
    let url:NSURL = NSURL(string: serverURL!)! 
    let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)! // Change Here 
    let postLength:NSString = String(postData.length) 
    let request:NSMutableURLRequest = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.HTTPBody = postData 
    request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("*/*", forHTTPHeaderField: "Accept") 
    return request 

लेकिन आप सेब प्रलेखन यह 5 एनकोडिंग को डिकोड करने के अनुसार iOS.Because में NSUTF8StringEncoding को डिकोड करने के लिए जरूरत नहीं है। UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE:

डेटा 5 समर्थित JSON विनिर्देश में सूचीबद्ध एन्कोडिंग में होना चाहिए। डेटा में बीओएम हो सकता है या नहीं। पार्सिंग के लिए उपयोग करने के लिए सबसे कुशल एन्कोडिंग यूटीएफ -8 है, इसलिए यदि आपके पास इस विधि में पास किए गए डेटा एन्कोडिंग में कोई विकल्प है, तो यूटीएफ -8 का उपयोग करें।

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/occ/clm/NSJSONSerialization/JSONObjectWithData:options:error:

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