2010-12-10 63 views
2

Je reçois une réponse JSON dans une variable NSData, puis convertir le NSData en NSString:conversion de chaînes contenant u à #### caractères sur iOS iPhone

NSString *aStr = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

Le problème est cette chaîne contient maintenant le caractère séquences du format \ u ####. (par exemple, Joe \ u2019s).

Je souhaite convertir toutes ces occurrences avec leur représentation de caractère unique. (Par exemple Joe \ u2019s devrait devenir Joe.

Toutes les idées sur la façon de le faire?

De plus, quelqu'un pourrait me pointer vers une ressource où je peux apprendre la bonne terminologie pour cela?

Merci

+0

aucune réponse du tout pour ici ?! –

Répondre

1

Je cherchais une réponse à cette question depuis trop longtemps aujourd'hui ... enfin j'ai juste mordu la balle et écrit ma propre catégorie sur NSString.Sens-à-dire de corriger les erreurs, je ne suis pas un magicien unicode. Cela ne gère certainement pas unicode passé \uffff mais je n'ai pas besoin de cela dans ma situation

@interface NSString (UnicodeAdditions) 
-(NSString *) unescapeUnicode; 
@end 

@implementation NSString (UnicodeAdditions) 

-(NSString *) unescapeUnicode { 
    NSString *input = self; 
    int x = 0; 
    NSMutableString *mStr = [NSMutableString string]; 

    do { 
     unichar c = [input characterAtIndex:x]; 
     if(c == '\\') { 
      unichar c_next = [input characterAtIndex:x+1]; 
      if(c_next == 'u') { 

       unichar accum = 0x0; 
       int z; 
       for(z=0; z<4; z++) { 
        unichar thisChar = [input characterAtIndex:x+(2+z)]; 
        int val = 0; 
        if(thisChar >= 0x30 && thisChar <= 0x39) { // 0-9 
         val = thisChar - 0x30; 
        } 
        else if(thisChar >= 0x41 && thisChar <= 0x46) { // A-F 
         val = thisChar - 0x41 + 10; 
        } 
        else if(thisChar >= 0x61 && thisChar <= 0x66) { // a-f 
         val = thisChar - 0x61 + 10; 
        } 
        if(z) { 
         accum <<= 4; 
        } 

        accum |= val; 
       } 
       NSString *unicode = [NSString stringWithCharacters:&accum length:1]; 
       [mStr appendString:unicode]; 

       x+=6; 
      } 
      else { 
       [mStr appendFormat:@"%c", c]; 
       x++; 
      }   
     } 
     else { 
      [mStr appendFormat:@"%c", c]; 
      x++; 
     } 
    } while(x < [input length]); 

    return(mStr); 
} 

@end