XML下载NSUTF8StringEncoding问题

时间:2012-07-17 06:45:49

标签: objective-c utf-8 character-encoding

我已经使用此方法从URL下载XML。 问题是编码字符。

-(void) scaricamentoXML{
    /*Save XML IN LOCALE*/
    NSString* docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSLog(@"Doc dir:  %@:",docsDir);
    //dichiaro il file locale in cui salvare i dati XML
    NSString* fileToDownload = @"provaXML.xml";

    NSString *hostURLString = @"http://demo.gigamips.com/rss.php?authkey=12345";
    NSURL *xmlURL = [NSURL URLWithString:hostURLString];
    NSLog(@"xmlURL = %@", xmlURL);
    //gestione codifica UTF-8
    NSError *error;
    NSString *dataString = [[NSString alloc] initWithContentsOfURL:xmlURL encoding:NSASCIIStringEncoding error:&error];
    NSLog(@"DataString = %@", dataString);
    //NSData *xml = [[NSData alloc]initWithContentsOfURL:xmlURL];
    NSData *xml = [dataString dataUsingEncoding:NSUTF8StringEncoding]; 
    //creo una stringa di appoggio in encoding UTF8 - verificare se funziona
    NSString *str =  [[NSString alloc] initWithData:xml encoding:NSUTF8StringEncoding];
    NSLog(@"NSData xml = %@", xml);
    //NSString *newStr = [[NSString alloc] initWithData:xml encoding:NSUTF8StringEncoding];
    //NSLog(@"newStr  = %@", newStr);
    NSString *filePath = [docsDir stringByAppendingPathComponent: fileToDownload];

    //[xml writeToFile: filePath atomically: NO];
    [str writeToFile: filePath atomically: NO];
    /*Save XML IN LOCALE*/


    /*SALVO LE IMMAGINI MINI IN LOCALE*/
    AuthParserImages *parser=[[AuthParserImages alloc]init];
    entryArray=[parser startParserLocale:@"provaXML"];
    GestioneImages *gi = [[GestioneImages alloc]init];
    for(int i =0; i< [entryArray count];i++){
        item=[entryArray objectAtIndex:i];
        [gi saveImageLocal:item.urlImageLow :item.id];
    }
    /*SALVO LE IMMAGINI MINI IN LOCALE*/


    /*CREA IL FILE GESTIONE NEW*/
    gp = [[GestionePlist alloc]init];
    [gp savePlist:@"begin"]; 
    /*CREA IL FILE GESTIONE NEW*/

    [self controlloXML];
    [activityIndicator stopAnimating];

}

我看不到像'或重音ù - à - ò等特殊的特征......

这是网络服务http://demo.gigamips.com/rss.php?authkey=12345

2 个答案:

答案 0 :(得分:0)

问题在于您的网络服务。您没有收到使用UTF8字符串编码编码的数据。

答案 1 :(得分:0)

虽然http://demo.gigamips.com/rss.php?authkey=12345 中的XML 以UTF-8编码,但它不使用正确的字符。例如,假设卷曲单引号'(U + 2019)出现,它使用U + 0092,这是一个不可打印的控制字符。

看起来该文档的作者在Windows-1252中编写了它,然后使用假设为latin-1的工具将其转换为UTF-8。

您可以尝试说服作者首先使用正确的字符,或者编写代码以用可能的替代品替换控制字符(即U + 2018而不是U + 0091,U + 2019而不是U + 0092,U + 201C而不是U + 0093,等等..你可以使用Windows-1252的字符表作为参考)