我以json格式从服务器接收数据,其中包含utf8字符串。我使用以下代码进行解码:
+ (NSString*)decodeUTF8String:(NSString*)utf8String { if (utf8String == nil) return nil; const char* str = [utf8String cStringUsingEncoding:NSISOLatin1StringEncoding]; if (str == nil) return nil; NSString* res = [NSString stringWithCString:str encoding:NSUTF8StringEncoding]; return res; }
作为回报,我们怎么知道字符串已经从UTF8解码了?问题是如果我们将已经解码的字符串发送到上面的函数,它将返回不正确的结果(有时它返回nil值)。
例如:
json looks like this : { "name": "Innoviris Demo Session\u00c3\u00a9\u00c3\u00a9\u00c3\u00a9", ...} //- parse json NSString* utf8String = @"Innoviris Demo Sessionééé"; //- decode NSString* decodedString = [self decodeUTF8String:utf8String]; //- decodeString = @"Innoviris Demo Sessionééé" ---> correctly //- decode again NSString* decodedString2 = [self decodeUTF8String:decodedString]; //- decodeString2 = nil ---> unexpected result