2009-11-10 3 views
8

पर एनएसएसटींग में यूनिकोड वर्णों का पता लगाएं मैं आईफोन के लिए एक एसएमएस एप्लिकेशन पर काम कर रहा हूं। मुझे यह पता लगाने की ज़रूरत है कि क्या उपयोगकर्ता ने एनएसएसटींग के अंदर किसी भी यूनिकोड वर्ण दर्ज किए हैं, जिसे वे भेजना चाहते हैं।आईफोन

मुझे ऐसा करने की ज़रूरत है क्योंकि यूनिकोड वर्ण संदेश में और अधिक स्थान लेते हैं, और इसलिए भी कि उन्हें उन्हें अपने हेक्साडेसिमल समकक्षों में परिवर्तित करने की आवश्यकता है।

तो मेरा सवाल यह है कि मैं एनएसएसटींग में एक यूनिकोड चरित्र की उपस्थिति का पता कैसे लगा सकता हूं (जिसे मैंने UITextView से पढ़ा है)। साथ ही, मैं उन वर्णों को उनके यूसीएस -2 हेक्साडेसिमल समकक्षों में कैसे परिवर्तित करूं?

जैसे 繁 = 7E41, 体 = 4F53, 中 = 4E2D, 文 = 6587

+0

सभी वर्ण यूनिकोड – user102008

उत्तर

25

केवल ASCII वर्ण (या अपनी पसंद का एक और एन्कोडिंग) के लिए जाँच करने के लिए उपयोग करें:

[myString canBeConvertedToEncoding: NSASCIIStringEncoding] ;

स्ट्रिंग में गैर-असीसी वर्ण होने पर यह वापस नहीं होगा। फिर आप स्ट्रिंग को यूसीएस -2 डेटा में परिवर्तित कर सकते हैं:

[myString dataUsingEncoding: NSUTF16BigEndianStringEncoding];

या NSUTF16LittleEndianStringEncoding आपके प्लेटफ़ॉर्म के आधार पर। यूसीएस -2 और यूटीएफ -16 के बीच थोड़ा अंतर है। यूटीएफ -16 ने यूसीएस -2 को पीछे छोड़ दिया है। आप मतभेदों के बारे में यहाँ पढ़ सकते हैं:

http://en.wikipedia.org/wiki/UTF-16/UCS-2

+0

@ जेरेमी बोवर हैं यदि मैं कॉल करता हूं [atext canBeConvertedToEncoding: NSUnicodeStringEncoding]; अगर मैं एक यूनिकोड चार (थाई पत्र) या लैटिन पत्र टाइप करता हूं तो यह हमेशा हां लौटाता है। –

+0

@Ilker Baltaci: ऐसा इसलिए है क्योंकि पात्रों को यूनिकोड में परिवर्तित किया जा सकता है। यूनिकोड ASCII का एक सुपरसेट है और इसमें थाई वर्ण शामिल हैं। –

0

मैं इस काम करने के लिए नहीं मिल सका।

मैं   गैर ब्रेकिंग स्पेस के साथ एक एचटीएमएल स्ट्रिंग

</div>Great Guildford St/SouthwarkSt & nbsp;Stop:& nbsp; BM<br>Walk to SE1 0HL<br> 
"Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM", 

मैं एनकोड/डीकोड के 3 प्रकार इन काम के

// NSData *asciiData = [instruction dataUsingEncoding:NSUTF16BigEndianStringEncoding];           
// NSString *asciiString = [[NSString alloc] initWithData:asciiData 
//  encoding:NSUTF16BigEndianStringEncoding]; 

// NSData *asciiData = [instruction dataUsingEncoding:NSASCIIStringEncoding];           
// NSString *asciiString = [[NSString alloc] initWithData:asciiData 
//  encoding:NSASCIIStringEncoding]; 

//little endian 
NSData *asciiData = [instruction dataUsingEncoding:NSUTF16LittleEndianStringEncoding];           
NSString *asciiString = [[NSString alloc] initWithData:asciiData 
    encoding:NSUTF16LittleEndianStringEncoding]; 

कोई भी कोशिश की है। वे के रूप में अगर मैं स्ट्रिंग यह लग रहा है ठीक

NSLog(@"HAS UNICODE :%@", instruction); 
..do encode/decode 
NSLog(@"UNICODE AFTER:%@", asciiString); 

कौन सा उत्पादन

HAS UNICODE: St/SouthwarkSt  Stop:  BM 
UNICODE AFTER: St/SouthwarkSt  Stop:  BM 

NSLog काम करने के लिए लग रहा था, लेकिन मैं एक NSArray में इन स्टोर करने के लिए हुआ है और मैं [stringArray description] कॉल करने के लिए हुआ है और सभी यूनिकोड था अभी भी वहाँ

instructionsArrayString: (
    "Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM", 
    "Walk to SE1 0HL" 
) 

तो NSLog में कुछ &nbsp; छुपाता है लेकिन यह NSArray विवरण में दिखाई देता है ताकि आप youve रेमो सोच सकते हैं यूनिकोड ved जब आप नहीं है।

वर्णों को प्रतिस्थापित करने वाली एक और विधि का प्रयास करेगा।