2014-01-30 33 views
1

所以我采取了数据文件,并将其编码为一个字符串:编码问题:一个NSString到一个NSDictionary的关键

   /////////////////////////////// 
       // Get the string 

       NSString* dataString = [[NSString alloc] initWithData:data 
                  encoding:encoding]; 

       NSLog(@"dataString = %@",dataString); 

该文件是法语单词列表和NSLog精细,显示出适当的口音(只是一个例子):现在

abandonnèrent 

,在代码的第二天一部分,我借此NSString的文件内容,并将其转换为一个字典的哪里话是键和对象是两个额外的字典:

   /////////////////////////////// 
       // Now parse the file (string) 

       NSMutableDictionary *mutableWordlist = [[NSMutableDictionary alloc] init]; 

       int i = 0; 
       for (NSString *line in [dataString componentsSeparatedByString:@"\n"]) { 
        NSArray *words = [line componentsSeparatedByString:@"\t"]; 

        NSNumber *count = [NSNumber numberWithInt:(i+1)]; 

        NSArray *keyArray; 
        NSArray *objectArray; 


        if ([words count] < 2) { // No native word 
         keyArray = [[NSArray alloc] initWithObjects:@"frequency", nil]; 
         objectArray = [[NSArray alloc] initWithObjects:count, nil]; 

        } 
        else { 
         keyArray = [[NSArray alloc] initWithObjects:@"frequency", @"native", nil]; 
         objectArray = [[NSArray alloc] initWithObjects:count, [words[1] lowercaseString], nil]; 

        } 

        NSDictionary *detailsDict = [[NSDictionary alloc] initWithObjects:objectArray forKeys:keyArray]; 

        [mutableWordlist setObject:detailsDict forKey:[words[0] lowercaseString]]; 

        i++; 
       } 


       self.wordlist = mutableWordlist; 

       NSLog(@"self.wordlist = %@", self.wordlist); 

但这里的关键有编码问题和日志作为这样,如果他们有口音:

"abandonn\U00e8rent 
" =  { 
     frequency = 24220; 
    }; 

这是怎么回事?

回答

1

没有(错误)发生。

当你NSLog an NSString它被输出为Unicode文本。但是,如果您的NSLogNSDictionary这些密钥是使用Unicode转义序列输出的,则\U00e8是您可以在字符串中使用的转义码,如果您无法键入è--比方说您的源文件是ASCII码。

所以区别只在于如何打印字符串,字符串没有不同。

HTH