NSString initWithData添加额外的换行符

时间:2014-06-12 17:44:16

标签: ios nsurlconnection nsdata

我正在使用NSURLConnection sendAsynchronousRequest使用HTTP post请求从我的服务器获取用户ID。以下是我用来执行此操作的代码:

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    //....
    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"data string: %@", dataString);
    //...
}];

当我使用Hurl.it测试请求以检查原始输出时,我得到一个数字字符串,如“13729”,如预期的那样。但是,NSLog输出将返回如下内容:

data string: 

13729

如您所见,正在添加两个额外的换行符。我可以使用以下代码解决这个问题:

NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

但是,我仍然想知道为什么会这样。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

如评论中所述,NSString和NSURLConnection在这种情况下表现正常。数据<0d0a3331 303137>以UTF-8字符CR LF开头。这可能是由于服务器端错误导致插入值。

至于为什么Hurl.it没有在原始输出中显示它,可能是由于它们的结尾存在错误。正常的HTTP响应是:

{header1} CR LF
...
{headerN} CR LF
CR LF
{body}

您的回答是:

{header1} CR LF
...
{headerN} CR LF
CR LF
CR LF
{body}