Reputation: 12717
I have a situation, I don't know what causing it.
I have got a string from server like this
NSString *str=@"\\u3060\\u3044\\u3053\\u3093\\u3001\\u5927\\u6839\\n";
I am trying to decode it using the following code..
NSLog(@"%@",[self decodeString:str]);
-(NSString*)decodeString:(NSString *)inputString{
NSData *utfStringData=[inputString dataUsingEncoding:NSUTF8StringEncoding];
NSString *output=[[NSString alloc] initWithData:utfStringData encoding:NSNonLossyASCIIStringEncoding];
return output;
}
I get nil as output.
But when I remove extra "\" from the input string, NSString itself shows the proper wording without even passing into decodeString function, see below
So I decided the replace the extra "\" from input string using following code
inputString=[inputString stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"];
Above code doesn't work either.
My question is -> What am I doing wrong? How does it work?
Thanks for Helping.
Upvotes: 1
Views: 634
Reputation: 4356
You need to use CFStringTransform
to convert unescape unicode characters. CFStringTransform
can perform real magic like transliterations between greek and latin (or about any known scripts), but it can also be used to do mundane tasks like unescaping strings from a server:
NSString *str=@"\\u3060\\u3044\\u3053\\u3093\\u3001\\u5927\\u6839\\n";
NSString *convertedString = [str mutableCopy];
CFStringRef transform = CFSTR("Any-Hex/Java");
CFStringTransform((__bridge CFMutableStringRef)convertedString, NULL, transform, YES);
NSLog(@"convertedString: %@", convertedString); //convertedString: だいこん、大根\n
CFStringTransform
is really powerful. It supports a number of predefined transforms, like case mappings, normalizations or unicode character name conversion. You can even design your own transformations.
OS X 10.11 and iOS 9 add the following method to Foundation:
- (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse;
Here is the code with the above method:
NSString *convertedString = [str stringByApplyingTransform:@"Any-Hex/Java" reverse:YES];
NSLog(@"convertedString: %@", convertedString); //convertedString: だいこん、大根\n
Upvotes: 2