当我将NSString转换为NSdata时,为什么会丢失“\ n”字符?

问题描述:

当我尝试将NSString对象转换为NSdata对象,我使用下面的代码:当我将NSString转换为NSdata时,为什么会丢失“ n”字符?

NSString *finalWordList = wordList.text; 
NSData *data = [finalWordList dataUsingEncoding:NSUTF8StringEncoding]; 

单词表是UITextView对象。

之后,我上传NSdata对象到我的web服务器,它将以.txt格式。当我检查文件时,我注意到上传的txt文件中缺少字符。有谁知道为什么吗?

任何形式的帮助,将不胜感激。

+1

作为一般的调试技术,您应该在每次操作后检查数据的值。如果您知道“\ n”消失的确切步骤,答案会更清晰。 – Akusete 2010-08-10 05:55:34

我想我知道答案。这是因为操作系统的差异。

对于iphone OS,\ n表示新行。但是对于Windows记事本中的显示,还需要“\ r”,即“\ r \ n”,以便它可以显示新的行字符。

+0

是的,使用记事本++ - 它可以处理Unix结束行标记 – JeremyP 2014-01-13 17:04:22

试试这个,然后用更新后的结果

NSString *finalWordList = wordList.text; 
NSLog("finalWordList = [%@] %d", finalWordList, [finalWordList length]); 
NSData *data = [finalWordList dataUsingEncoding:NSUTF8StringEncoding]; 
NSLog("data length = %d", [data length]); 

我敢打赌,你的NSData对象是正确的长度,这意味着它推出了其错误的传输/存储步骤回来。既然你没有显示你是如何做的,那么很难肯定地说。

+0

感谢您的帮助。我在下面发布新内容。 – xeron 2010-08-10 07:49:42

这是我的代码的一部分...我没有发布它在这里,因为它有点长,哈哈。 我想要做的是,我尝试抓取用户输入(从UITextField)并将其显示在屏幕上(通过UITextView)。之后,我从UITextView获取.text值,将其从NSString转换为NSData,然后使用php上传脚本将NSData对象上传到HTTP服务器。

NSString *completeName = [NSString stringWithFormat:@"%@/%@.txt",mainDelegate.gCourseCode,mainDelegate.gUID]; 

NSString *finalWordList = wordList.text; 
NSData *data = [finalWordList dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *urlString = @"http://cetl.no-ip.org:50080/upload.php"; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",completeName] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:data]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

NSLog(returnString); 

txt文件可以上传到服务器。但它忽略了\ n字符。

非常感谢您的帮助。

+0

请编辑您的问题以添加此信息,而不是为其创建答案。 – JeremyP 2010-08-10 08:10:01

+0

我在这里是新的,我不知道如何编辑问题。我很抱歉。 – xeron 2010-08-11 05:08:35

我假设您期待您的字符串是换行分隔的单词列表。

不要忘记,对于HTTP,正确的行结尾是回车,换行(%0D%0A)。

我发现用\ r \ n替换所有“\ n”字符会产生正确的结果,服务器可以看到新行。