Ios NSString INITWITH DATA添加额外的换行符
我正在使用Ios NSString INITWITH DATA添加额外的换行符,ios,nsurlconnection,nsdata,Ios,Nsurlconnection,Nsdata,我正在使用NSURLConnection sendAsynchronousRequest使用HTTP post请求从服务器获取用户id。以下是我用于执行此操作的代码: [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
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);
//...
}];
当我使用检查原始输出来测试请求时,我得到了一个数字字符串,如预期的“13729”。但是,NSLog输出将返回如下内容:
data string:
13729
如您所见,正在添加两个额外的换行符。我可以使用以下代码解决此问题:
NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
然而,我仍然想理解为什么会发生这种情况。有人能解释一下吗?如评论中所述,在这种情况下,NSString和NSURLConnection的行为是正确的。数据
以UTF-8字符CR LF
开头。这可能是由于服务器端错误插入了值
至于为什么Hull.it没有在原始输出中显示这一点,这可能是由于其端部存在错误。正常的HTTP响应是:
{header1} CR LF
...
{headerN} CR LF
CR LF
{body}
{header1} CR LF
...
{headerN} CR LF
CR LF
CR LF
{body}
你的回答是:
{header1} CR LF
...
{headerN} CR LF
CR LF
{body}
{header1} CR LF
...
{headerN} CR LF
CR LF
CR LF
{body}
可能是因为不同的操作系统使用不同的字节来标记换行符。如果我没记错的话,Windows使用
/n/r
,OSX只使用/n
。什么[数据描述]
输出?@BrianNickel我得到类似数据字符串的东西:
后跟void\u WebThreadLockFromAnyThread(bool),0x1f661810:从主线程或web线程以外的线程获取web锁。不应从次线程调用UIKit。
0d 0a是换行符。这些来自服务器。好的,谢谢,我会查看服务器代码。为什么Hull.it显示的是原始输出,但没有任何换行符?