2010-10-12 8 views
0

J'utilisais le format XML codé UTF-8 pour l'analyse en utilisant NSXMLParser. Mais certains des caractères spéciaux causaient des problèmes et ont donc décidé d'utiliser l'encodage ISO-8859-15.Comment pouvons-nous analyser un XML avec encodage ISO-8859-15?

Mais après cela, l'analyseur ne démarre même pas l'analyse et donne l'erreur 31 - NSXMLParserUnknownEncodingError. Qu'est-ce que je devrais faire maintenant? Est-il possible de toute façon, nous pouvons analyser un xml codé ISO-8859-15 dans l'iphone? Est-ce que libxml ou tout autre analyseur fournira un support pour ce codage?

Répondre

0

J'ai résolu ce problème par moi-même. Nous avons décidé d'utiliser le codage UTF-8 pour le XML et l'avons analysé en utilisant le NSXMLParser. Mais avant l'analyse, nous avons fait les étapes suivantes.

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://the url for parsing"]]; 

NSHTTPURLResponse* urlResponse = nil; 
NSError *error = [[NSError alloc] init]; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 

NSString *result = [[[NSString alloc] initWithData:responseData encoding:NSISOLatin1StringEncoding] autorelease]; 
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:[result dataUsingEncoding:NSUTF8StringEncoding]]; 

Puis, après que certains caractères italiens (3-4) ont été posent encore problème et nous les avons remplacés manuellement après avoir obtenu le résultat.

Maintenant tout fonctionne bien.

-1

NSISOLatin1StringEncoding est incorrect, par ex. € ne peut pas encoder.

fichier xml:

<?xml version="1.0" encoding="ISO-8859-15"?> 
... 

xCode:

NSString *xmlFileAsString = nil; //read xml file 

NSStringEncoding iso88599 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin9); 

NSData *data = [xmlFileAsString dataUsingEncoding:iso88599 allowLossyConversion:YES]; 

xmlDocPtr doc = xmlReadMemory([data bytes], (int)[data length], NULL, NULL, XML_PARSE_COMPACT | XML_PARSE_NOBLANKS); 

if (doc == NULL) { 
... 

chaîne get de xml: (par exemple USAdditions.m)

+ (NSString *)stringWithXmlString:(xmlChar *)str free:(BOOL)freeOriginal { 
    if (!str) return nil; 
    NSString *string = [NSString stringWithCString:(char*)str encoding:NSUTF8StringEncoding]; 
    if (freeOriginal) 
     xmlFree(str); 
    return string; 
} 
+0

hmm ... donc ce _is_ la solution? – kleopatra