2010-01-23 16 views
13

के साथ एनएसएसटींग में एनएसटीटींग को कॉन्स्टर्ट करें * मुझे आश्चर्य है कि कॉन्स्ट char * स्ट्रिंग को एनएसएसटींग में परिवर्तित करने के लिए कौन सी विधि बेहतर होगी।
मुझे पता चला कि कुछ तथ्य हैं।लंबाई और एन्कोडिंग

  • [एनएसएसटींग स्ट्रिंगविथसीस्ट्रिंग: लंबाई:] तरह से बहिष्कृत है।
  • [NSString stringWithCString: एन्कोडिंग] मेरा उद्देश्य

के लिए इस्तेमाल किया जा सकता लेकिन मैं लंबाई और एन्कोडिंग (साथ परिवर्तित करना चाहते हैं, क्योंकि मैं करने के लिए एन्कोडिंग सेट करके अगर मैं कुछ गैर- ASCII वर्ण है कि ठीक बनाना चाहते UTF-8)। कोई विचार?

मैं बस अब लगता है

  1. अन्य चार बना सकते हैं और std :: strncpy (CH1, CH2, लेन)
  2. उपयोग का उपयोग करके लंबाई के साथ नकल [NSString stringWithCString: एन्कोडिंग:]

लेकिन यह अच्छी तरह से काम नहीं करता है।

उत्तर

16

उपयोग:

[NSString initWithBytes:length:encoding]. 
33

अपने स्थिरांक चार * चर foo नाम है (और यह एक अशक्त-समाप्त स्ट्रिंग को इंगित करता है), तो सिर्फ इतना कहना

[NSString stringWithUTF8String:foo] 

क्योंकि UTF-8 सुपरसेट है ASCII का, यह काम करेगा foo अंक यूटीएफ -8 या ASCII के लिए। फिर आप बिना किसी समस्या के पूर्ण यूनिकोड तक जा सकते हैं।

+4

यह केवल तभी काम करता है जब आपकी स्ट्रिंग ASCII है, हालांकि। यदि आपकी स्ट्रिंग कुछ और है (उदाहरण के लिए मैकरोमन या आईएसओ लैटिन), तो आपको किसी विशेष चरित्र के लिए गलत ग्लीफ प्रदर्शित किया जाएगा, सबसे खराब आपको एनआईएल स्ट्रिंग मिल जाएगी क्योंकि आप बाइट्स का अमान्य अनुक्रम उत्पन्न करते हैं जो ऐसा नहीं करता है एक वैध यूटीएफ 8 चरित्र के लिए मानचित्र नहीं है (हां, यह संभव है। यूटीएफ 8 256 से अधिक विभिन्न पात्रों को एन्कोड करता है, इसलिए बहु-बाइट अनुक्रम हैं जो एक चरित्र को एन्कोड करते हैं, और इनमें से कुछ मान्य नहीं हैं (अभी तक) – uliwitness

+0

बहुत उपयोगकर्ता धन्यवाद – vgonisanz

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