【问题标题】:Removing unicode and backslash escapes from NSString converted from NSData从 NSData 转换的 NSString 中删除 unicode 和反斜杠转义
【发布时间】:2012-02-19 13:26:18
【问题描述】:

我正在通过以下方式将响应数据从 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。最干净的方法是什么?

【问题讨论】:

  • 看起来响应是用 json 格式编码的,然后简单地使用像 SBJson 这样的 json 解码器来获取正确的字符串
  • @phix23 没想到,解析JSON确实给出了正确的形式!写一个答案,我会接受的。

标签: objective-c ios nsstring nsdata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 其实是相关的,因为响应是JSON格式的。
    猜你喜欢
    • 2017-02-28
    • 2017-03-29
    • 2011-10-02
    • 1970-01-01
    • 2015-05-19
    • 2015-09-21
    • 2011-11-09
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多