从NSData转换的NSString中删除unicode和反斜杠转义

时间:2012-01-26 12:51:41

标签: objective-c ios nsstring nsdata

我正在通过以下方式将响应数据从Web请求转换为NSString:

NSData *data = self.responseData;
if (!data) {
    return nil;
}
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)[self.response textEncodingName]));
NSString *responseString = [[NSString alloc] initWithData:data encoding:encoding];

但是生成的字符串如下所示:

"birthday":"04\/01\/1990",
"email":"some.address\u0040some.domain.com"

我想要的是

"birthday":"04/01/1990",
"email":"some.address@some.domain.com"

没有反斜杠转义和unicode。最干净的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用NSString的stringByReplacingCharactersInRange:withString:stringByReplacingOccurrencesOfString:withString:替换(或删除)字符。

要删除(转换)unicode字符,请使用dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES(来自this answer)。

对不起,如果以下内容与您的案件无关:就我个人而言,我会问自己,首先是哪些反斜杠来自哪里。例如,对于JSON,我知道另一边的某种JSON序列化程序escapes some characters(所以斜杠确实存在,在响应中,这不是Cocoa中的一些奇怪的错误) 。这样我就可以确定我必须处理哪些角色以及如何处理。或者也许我会使用some kind of library为我做这件事。

答案 1 :(得分:1)

响应似乎是JSON编码的。因此,只需使用JSON库(SBJson,JsonKit等)解码响应字符串即可获得正确的表单。