【问题标题】:Xcode - Special characters in JSONXcode - JSON 中的特殊字符
【发布时间】:2016-03-08 10:46:00
【问题描述】:

我正在通过 JSON 从网站加载数据库。当我下载数据库时,我使用 UTF8 使所有字符正确显示,当我对它们进行 NSLOG 处理时,它们都按原样显示。但是当我使用 JSON 分析数据然后尝试过滤掉一些单词时,带有特殊字符的单词变成了这样:“H\U00f6ghastighetst\U00e5g”,它应该说:“Höghastighetståg”。

我试图找到一种方法让代码在过滤后将文本转换回 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);
}}

【问题讨论】:

    标签: ios json xcode character-encoding special-characters


    【解决方案1】:

    试试

    + (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;
    }
    

    【讨论】:

    • 谢谢 Jose920405,但我不认为我有能力知道如何在我当前的代码中实现它:/
    • 我现在收到的是“H\\366ghastighetst\\345g”,而不是“H\U00f6ghastighetst\U00e5g”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2014-11-13
    • 2018-04-17
    相关资源
    最近更新 更多