为什么在将NSString转换为NSdata时缺少“\ n”字符?

时间:2010-08-10 05:52:04

标签: iphone objective-c

当我尝试将 NSString 对象转换为 NSdata 对象时,我使用以下代码:

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

wordList是 UITextView 对象。

之后,我将 NSdata 对象上传到我的网络服务器,该服务器将采用.txt格式。当我检查文件时,我注意到上传的txt文件中缺少 \n 字符。有谁知道为什么?

任何形式的帮助都将受到赞赏。

5 个答案:

答案 0 :(得分:1)

尝试此操作然后返回更新后的结果

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

我敢打赌你的NSData对象是正确的长度,这意味着你的传输/存储步骤引入了错误。既然你没有表明你是怎么做的,那肯定很难说。

答案 1 :(得分:0)

这是我的代码的一部分...我没有在这里发布,因为它有点长,哈哈。 我试图做的是,我尝试获取用户输入(来自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字符。

非常感谢你的帮助。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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