2009-08-07 8 views
0

NSXMLParser a donc des problèmes d'analyse des chaînes à l'aide de l'encodeur Windows-1252. Maintenant, j'ai trouvé une solution sur cette page pour le convertir en NSUTF8StringEncoding. Mais maintenant, il heurte des caractères qu'il ne peut pas analyser.NSXMLParser codé par Windows-1252

J'ai donc pensé que cela fonctionnerait si j'échappais aux caractères spéciaux et que je les restituais après l'avoir analysé. Par exemple:

string = [string stringByReplacingOccurrencesOfString:@":" withString:@"__58__"]; 

Comme il est permis d'utiliser le caractère _ sans avoir une erreur d'analyse et NSXMLParser je peux transférer la valeur à son caractère propre.

Y a-t-il un moyen de parcourir tous les caractères ASCII pour pouvoir remplacer tous les caractères spéciaux (sauf <,> et _ bien sûr)?

Répondre

0

Totalement non testé. Je ne sais même pas si ça compile, mais ça peut vous mettre sur la bonne voie. string doit être un NSMutableString.

NSRange r = NSMakeRange(0, [string length]); 
while (r.location < [string length]) 
{ 
    r = [string rangeOfCharactersFromSet:[NSCharacterSet symbolCharacterSet] options:0 range:r]; 
    if (r.location != NSNotFound) 
    { 
    NSMutableString *replacement = [[NSMutableString alloc] initWithCapacity:6]; 
    for (NSUInteger i = r.location; i <= NSMaxRange(r); i++) 
    { 
     unichar c = [string characterAtIndex:i]; 
     if (c != "_") 
     { 
     [replacement appendFormat:@"__%d__", (unsigned)c]; 
     } 
    } 
    [string replaceCharactersInRange:r withString:replacement]; 
    [replacement release]; replacement = nil; 
    r.location = r.location + [string length] + 1; 
    r.length = [string length] - r.location; 
    } 
} 
0

En supposant que vous avez une NSMutableString str, vous pouvez effectuer les opérations suivantes:

NSMutableString *str = ...; 
[str replaceOccurrencesOfString:":" withString:@"__58__" 
         options:NSLiteralSearch 
          range:NSMakeRange(0, [str length])]; 
[str replaceOccurrencesOfString:"&" withString:@"__38__" 
         options:NSLiteralSearch 
          range:NSMakeRange(0, [str length])]; 

Vous voyez le modèle!

Vous pouvez également utiliser les entités XML pour ces valeurs, par ex. remplacez & par &amp;.

0

Merci pour l'aide tout le monde, ce code fait résolu mon problème:

for (unichar asciiChar = 1; asciiChar <= 255; asciiChar++) { 
    NSString *stringWithAsciiChar = [NSString stringWithCharacters:&asciiChar length:1]; 
    if (stringWithAsciiChar == nil) continue; 
    string = [string stringByReplacingOccurrencesOfString:stringWithAsciiChar withString:[NSString stringWithFormat:@"__%d__", asciiChar]]; 
} 
Questions connexes