I am trying to create a string from bytes a received via network. The NSString I het is always an empty one.
if (stringLength > 0) {
NSData *bytes = [[NSData alloc] initWithBytes:data+1 length:stringLength];
result = [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding];
//result = [[NSString alloc] initWithBytes:data+1 length:stringLength encoding:NSASCIIStringEncoding];
}
As I said I get an empty NSString. The string is a base64 encoded value so it should be valid utf-8 since it only contains ascii symbols.
Maybe your raw bytes aren’t UTF-8 after all. Or maybe, because you’re passing
data+1instead ofdataitself, you’re causing the encoding attempt to fail because the process thinks there’s an improper UTF-8 encoding sequence. (Forgive me if I’m being presumptuous, but you have to take everything into account.) In any case, you’re relying heavily on your assumption, and that’s a trap we all fall into now and then.Here’s a strategy for you. If your attempt at creating an NSString instance using
NSUTF8StringEncodingreturns nil, then try usingNSISOLatin1StringEncoding. And if that returns nil, then try usingNSMacOSRomanStringEncoding.Even if, after all of that, you get a string that’s not quite right, it’s still better than a nil string in that it could help to show you if there’s some other area in which you’ve made a mistake.
Good luck to you in your endeavors.