2011-08-09 6 views
11

मुझे पता है कि SQLite में stringWithCString को बदलते समय इसे कैसे संभालना है ... आप इसके बजाय stringWithUTF8String बदल रहे हैं। क्या यह char * के साथ समान है जब इसे sysctlbyname द्वारा वापस किया जाता है? (नीचे कोड देखें)stringWithCString बहिष्कृत ... तो मैं sysctlbyname द्वारा लौटाए गए char * के साथ क्या उपयोग करूं?

- (NSString *) platform{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithCString:machine]; 
    free(machine); 
    return platform; 
} 

अग्रिम धन्यवाद!

+0

हाँ, stringWithUTF8String चरित्र स्ट्रिंग देता है। – rptwsthi

उत्तर

19

यदि आप जिस सी स्ट्रिंग का उपयोग कर रहे हैं वह यूटीएफ -8-एन्कोडेड है, तो stringWithUTF8String: का उपयोग करें। यदि यह सादा ASCII है, तो NSASCIIStringEncoding के एन्कोडिंग के साथ stringWithCString:encoding: का उपयोग करें। अन्यथा, यह शायद लैटिन -1 का उपयोग करके एन्कोड किया गया है, इस मामले में आपको के एन्कोडिंग के साथ stringWithCString:encoding: का उपयोग करना चाहिए।

इस मामले में, sysctlbyname लगभग निश्चित रूप से तुम वापस एक ASCII स्ट्रिंग देने जा रहा है, तो आप इस करना चाहिए:

NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 

हालांकि दो अन्य किसी भी विधि का उपयोग कर आप कोई नुकसान नहीं होगा।

NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
2

तुम सिर्फ स्ट्रिंग एन्कोडिंग, जो sysctlbyname के मामले में ASCII है निर्दिष्ट करने की आवश्यकता stringWithCString के पक्ष में पदावनत किया गया है: एन्कोडिंग :. स्ट्रिंग WithCString के व्यवहार को पुन: उत्पन्न करने के लिए आप [NSString defaultCStringEncoding] का उपयोग कर सकते हैं: लेकिन आप शायद NSASCIIStringEncoding या NSUTF8StringEncoding निर्दिष्ट करने से बेहतर हैं। Sysctlbyname द्वारा लौटाए गए एन्कोडिंग को अंतर्निहित लगता है, इसलिए 7-बिट ASCII एक सुरक्षित शर्त है, जो या तो एन्कोडिंग उपयुक्त बनाता है।

1

यदि आप पाते हैं

errorString = [NSString stringWithCString:iax_errstr]; 

में त्रुटि की कोशिश इस

errorString = [NSString stringWithCString:iax_errstr encoding:NSASCIIStringEncoding]