0

I'm getting a crash with the following encoding fix I'm trying to implement:

  // encoding fix
    NSString *correctStringTitle = [NSString stringWithCString:[[item objectForKey:@"main_tag"] cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding];

    cell.titleLabel.text = [correctStringTitle capitalizedString];

my crash log output states:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithCString:encoding:]: NULL cString'

thanks for any help

hanumanDev
  • 6,592
  • 11
  • 82
  • 146

2 Answers2

2

You seem to think that a double conversion is necessary in order to get the correct result. It isn't, nor is it possible (that's why the call to cStringUsingEncoding:NSISOLatin1StringEncoding returns NULL). Just leave this part out and assign to correctStringTitle directly.

NSGod
  • 22,699
  • 3
  • 58
  • 66
  • I trimmed it down to: // encoding fix cell.titleLabel.text = [[NSString stringWithCString:[[item objectForKey:@"main_tag"] cStringUsingEncoding:NSISOLatin1StringEncoding]]capitalizedString]; but the encoding issue remains. are you saying to remove the cStringUsingEncoding:NSISOLatin1StringEncoding completely? thanks – hanumanDev Feb 03 '13 at 15:45
  • I thought I had to use this Latin1StringEncoding for some Spanish accented characters that were displaying. it should look like this then: cell.titleLabel.text = [[NSString stringWithCString:[[item objectForKey:@"main_tag"] encoding:NSUTF8StringEncoding] capitalizedString]; ? – hanumanDev Feb 03 '13 at 17:25
  • @hanumanDev 1. Why would you **have to?** The encoding is your choice. 2. No, remove all that clutter. `cell.titleLabel.text = [[item objectForKey:@"main_tag"];`. –  Feb 03 '13 at 17:26
  • the problem is that if I don't encode then some character show up like "Espaå+_A" etc... particularly with Spanish – hanumanDev Feb 03 '13 at 17:37
0

I had the same problem with italian accented characters while trying to get text from html and my solution to avoid the situation that cStringUsingEncoding:NSISOLatin1StringEncoding returns NULL is ensuring that when you get the html from data you use:

[[NSString alloc] initWithData:self.responseData encoding:NSISOLatin1StringEncoding]

and not

encoding:NSUTF8StringEncoding
Robert
  • 5,278
  • 43
  • 65
  • 115