2011-10-22 17 views
15

में कनवर्ट करना मैं एक सरणी से आने वाले सरणी से स्ट्रिंग पढ़ने और उन तारों को प्रिंट करने की कोशिश कर रहा हूं।यूटीएफ 8 अक्षरों से बचने के लिए उनके मूल रूप

सरणी में तारों में यूटीएफ 8 अक्षरों से बच निकला है - उदाहरण के लिए "Nuša Florjančič" plist से पढ़ते समय "Nu\u0161a Florjan\u010di\u010d" बन जाता है। प्लेस्ट की सामग्री को बदलने का कोई तरीका नहीं है, लेकिन मेरे प्रोग्राम को नामों को सही तरीके से प्रदर्शित करने की आवश्यकता है।

अजीब बात यह है कि उद्देश्य-सी स्ट्रिंग को हार्डकोड करते समय स्वचालित रूप से ऐसा करने लगता है। हालांकि, अगर मुझे प्लेस्ट से स्ट्रिंग मिलती है तो कुछ भी नहीं होता है।

आपको एक उदाहरण देता करने के लिए, यहाँ कुछ कोड है:

NSString *name1 = @"Nu\u0161a Florjan\u010di\u010d"; 
NSString *name2 = [list objectAtIndex:0];  
NSLog(@"name 1: %@", name1); 
NSLog(@"name 2: %@", name2); 

[list objectAtIndex:0]@"Nu\u0161a Florjan\u010di\u010d" शामिल हैं - फर्क सिर्फ इतना है कि यह plist संपादक के माध्यम से स्थापित किया गया है कि है।

कंसोल आउटपुट है:

2011-10-22 18:00:02.595 Test[13410:11c03] name 1: Nuša Florjančič 
2011-10-22 18:00:02.595 Test[13410:11c03] name 2: Nu\u0161a Florjan\u010di\u010d 

मैं चीजों के सभी प्रकार की कोशिश की है एक सी स्ट्रिंग में स्ट्रिंग बदलने और फिर एक UTF-8 एन्कोडिंग के साथ एक NSString वस्तु बनाने लेकिन कुछ भी पर काम किया सहित, सब।

मैं वास्तव में आपके किसी भी संकेतक की सराहना करता हूं जो मुझे इस प्रतीत होता है कि यह समस्याएं हल हो सकती हैं।

उत्तर

41

ऐसा लगता है कि प्लेस्ट में स्ट्रिंग में यूनिकोड वर्ण संख्या 0x161 के बजाय अक्षर "\ u0161" हैं। इसलिए आपको उस स्ट्रिंग में भागने की आवश्यकता है जिसे आपने प्लिस्ट से निकाला है। NSString ऐसा कर सकते हैं आप NSNonLossyASCIIStringEncoding प्रयोग करने के लिए:

#import <Foundation/Foundation.h> 
int main (int argc, const char * argv[]) 
{ 
    @autoreleasepool { 
     NSString *name2escaped = @"Nu\\u0161a Florjan\\u010di\\u010d"; 
     NSString *name2 = [NSString 
      stringWithCString:[name2escaped cStringUsingEncoding:NSUTF8StringEncoding] 
      encoding:NSNonLossyASCIIStringEncoding]; 
     NSLog(@"name2 = %@", name2); 
    } 
    return 0; 
} 
+0

बहुत बहुत धन्यवाद, दोस्त! यह चाल है :) – Tobi

+0

कोड का बड़ा टुकड़ा। धन्यवाद। –

+0

@Tobi अगर यह काम करता है, तो आप इसे उत्तर के रूप में क्यों चिह्नित नहीं कर सकते? – DroidHeaven

1

अन्य समाधान अपनी सूची स्ट्रिंग पार्स है (मैं पार्स करने के लिए यह पहले इसे बनाने के लिए इस्तेमाल किया)

NSString yourFinalString = [NSString stringWithCString:[yourOriginalString cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]; 

(क्रोएशियाई तरह लग रहा है, मुझे लगता है latin1 फिट होगा ठीक से)

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