0

我已经制作了这种从 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

4

2 回答 2

0

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

于 2012-07-17T07:17:02.843 回答
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 的字符表作为参考)

于 2012-07-17T12:45:00.450 回答