当我将NSString转换为NSdata时,为什么会丢失“\ n”字符?
当我尝试将NSString
对象转换为NSdata
对象,我使用下面的代码:当我将NSString转换为NSdata时,为什么会丢失“ n”字符?
NSString *finalWordList = wordList.text;
NSData *data = [finalWordList dataUsingEncoding:NSUTF8StringEncoding];
单词表是UITextView
对象。
之后,我上传NSdata
对象到我的web服务器,它将以.txt格式。当我检查文件时,我注意到上传的txt文件中缺少字符。有谁知道为什么吗?
任何形式的帮助,将不胜感激。
我想我知道答案。这是因为操作系统的差异。
对于iphone OS,\ n表示新行。但是对于Windows记事本中的显示,还需要“\ r”,即“\ r \ n”,以便它可以显示新的行字符。
是的,使用记事本++ - 它可以处理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对象是正确的长度,这意味着它推出了其错误的传输/存储步骤回来。既然你没有显示你是如何做的,那么很难肯定地说。
感谢您的帮助。我在下面发布新内容。 – 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字符。
非常感谢您的帮助。
我假设您期待您的字符串是换行分隔的单词列表。
不要忘记,对于HTTP,正确的行结尾是回车,换行(%0D%0A)。
我发现用\ r \ n替换所有“\ n”字符会产生正确的结果,服务器可以看到新行。
作为一般的调试技术,您应该在每次操作后检查数据的值。如果您知道“\ n”消失的确切步骤,答案会更清晰。 – Akusete 2010-08-10 05:55:34