2010-08-10 63 views
0

當我嘗試將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

回答

0

我想我知道答案。這是因爲操作系統的差異。

對於iphone OS,\ n表示新行。但是對於Windows記事本中的顯示,還需要「\ r」,即「\ r \ n」,以便它可以顯示新的行字符。

+0

是的,使用記事本++ - 它可以處理Unix結束行標記 – JeremyP 2014-01-13 17:04:22

1

試試這個,然後用更新後的結果

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

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字符。

非常感謝您的幫助。

+0

請編輯您的問題以添加此信息,而不是爲其創建答案。 – JeremyP 2010-08-10 08:10:01

+0

我在這裏是新的,我不知道如何編輯問題。我很抱歉。 – xeron 2010-08-11 05:08:35

0

我假設您期待您的字符串是換行分隔的單詞列表。

不要忘記,對於HTTP,正確的行結尾是回車,換行(%0D%0A)。

0

我發現用\ r \ n替換所有「\ n」字符會產生正確的結果,服務器可以看到新行。

相關問題