2016-03-08 70 views
0

Im通过JSON从网站加载数据库。当我下载数据库时,我使用UTF8使所有字符正确显示,当我使用NSLOG时,它们全部显示为它应该显示的内容。但是,当我使用JSON分析数据并尝试过滤出几个单词时,带有特殊字符的单词变成这样:“H \ U00f6ghastighetst \ U00e5g”它应该在哪里说:“Höghastighetståg”。Xcode - JSON中的特殊字符

我试图找到一种方法来使代码在过滤后将文本转换回UTF8,但不知何故我无法做到这一点。对于一些答案会非常有帮助。

NSError *error; 
NSString *url1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.pumba.se/example.json"] encoding:NSUTF8StringEncoding error:&error]; 

NSLog(@"Before converting to NSData: %@", url1); 

NSData *allCoursesData = [url1 dataUsingEncoding:NSUTF8StringEncoding]; 


NSMutableDictionary *JSONdictionary = [NSJSONSerialization 
             JSONObjectWithData:allCoursesData 
             options:kNilOptions 
             error:&error]; 
if(error) 
{ 
    NSLog(@"%@", [error localizedDescription]); 
} 
else { 
    NSMutableArray *allNames = [NSMutableArray array]; 
    NSArray* entries = [JSONdictionary valueForKeyPath:@"hits.hits"]; 

    for (NSDictionary *hit in entries) { 
     NSArray *versions = hit[@"versions"]; 
     for (NSDictionary *version in versions) { 
      NSDictionary *properties = version[@"properties"]; 
      NSString *status = [properties[@"Status"] firstObject]; 
      NSString *name = [properties[@"Name"] firstObject]; 
      if ([status isEqualToString:@"usable"]) { 
       [allNames addObject:name]; 
      } 
     } 
    } 

    NSLog(@"All names: %@", allNames); 
}} 

回答

0

尝试

+ (NSString *)utf8StringEncoding:(NSString *)message 
{ 
    NSString *uniText = [NSString stringWithUTF8String:[message UTF8String]]; 
    NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    message = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding]; 
    return message; 
} 

+ (NSString *)asciiStringEncoding:(NSString *)message 
{ 
    const char *jsonString = [message UTF8String]; 
    NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)]; 
    message = [[NSString alloc] initWithData:jsonData encoding:NSNonLossyASCIIStringEncoding]; 
    return message; 
} 

这个代码可以帮助你

+ (NSDictionary *)jsonStringToObject:(NSString *)jsonString 
{ 
    NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *jsonResponse; 
    if (data) 
     jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

    return jsonResponse; 
} 

+ (NSString *)objectToJsonString:(NSDictionary *)dict 
{ 
    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 
    if (jsonData.length > 0 && !error) 
    { 
     NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
     return jsonString; 
    } 
    return nil; 
} 
+0

谢谢Jose920405,但我不认为我有能力知道如何在我目前的代码中执行该操作,恐怕:/ – Dlindau

+0

而不是“H \ U00f6ghastighetst \ U00e5g”我现在收到“H \\ 366ghastighetst \\ 345g”。 – Dlindau