2012-03-19 7 views
6

Ho bisogno di ottenere la stringa url da NSString. Faccio quanto segue:NSString stringByReplacingPercentEscapesUsingEncoding non funziona

NSString * str = [NSString stringWithString:@"[email protected]"]; 

    NSString * eStr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",eStr); 

Il risultato è [email protected] Ma ho bisogno di i% 40gmail.com. la sostituzione di NSUTF8StringEncoding con NSASCIIStringEncoding non è di aiuto.

+0

hai capito come sostituire stringByReplacingPercentEscapesUsingEncoding? – user2924482

risposta

12

Stai utilizzando il metodo sbagliato. Questo fa il contrario, traducendo le percentuali di escape ai loro personaggi. Probabilmente vuoi usare stringByAddingPercentEscapesUsingEncoding:.

NSString *str = @"[email protected]"; 
NSString *eStr = 
    [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

A parte questo, sembra il personaggio @ non è sfuggito per impostazione predefinita. Quindi, come indicato dalla documentazione del metodo precedente, sarà necessario utilizzare CoreFoundation per ottenere ciò che si desidera.

NSString *str = @"[email protected]"; 

CFStringRef eStr = CFURLCreateStringByAddingPercentEscapes(
    kCFAllocatorDefault, 
    (CFStringRef)str, 
    NULL, 
    (CFStringRef)@"@", 
    kCFStringEncodingUTF8 
); 

NSLog(@"%@", eStr); 

CFRelease(eStr); 

Si prega di verificare la documentation per saperne di più sulla funzione utilizzata e come per renderla adatta alle tue esigenze.

+0

Questo è corretto. –

+0

Non funziona per me. Restituisce la stessa stringa :( –

+0

@Romula Effettivamente, mi dispiace, ho aggiornato la risposta. – sidyll