【问题标题】:Problem retrieving text file in iPhone在 iPhone 中检索文本文件时出现问题
【发布时间】:2011-03-14 07:13:01
【问题描述】:

我使用以下代码将文本文件写入 de Documents 文件夹:

NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *fileDocumentsDirectory = [filePaths objectAtIndex:0];    
NSString *fullPath = [fileDocumentsDirectory stringByAppendingPathComponent:self.fileName];
NSData *tmpData = [NSData dataWithBytes:self.content length:[self.content length]];
[tmpData writeToFile:appFile atomically:YES];

如果我直接用 NSData 的内容创建一个字符串,它可以工作,所以数据看起来没问题。我用以下方式检索文件:

NSString *fileContents = [[NSString alloc] initWithContentsOfFile:fullPath usedEncoding:nil error:nil];

NSString *fileContents = [NSString stringWithContentsOfFile:fullPath usedEncoding:&encoding error:&error];

或进入一个 NSData 并从那里进入一个字符串

NSData *fileContentsData = [NSData dataWithContentsOfFile:fullPath];
NSString *fileContents = [[NSString alloc] initWithData:fileContentsData encoding:NSUTF8StringEncoding];

在这两种情况下,fileContents 都是空的。我要疯了,我只是不明白为什么 fileContents 为空。我用 NSLog 检查了每个值,并且“self.content”包含值,NSData 包含相同的值...但尝试检索它们返回 null 或,尝试说 NSUTF16StringEncoding,我检索...中文字符,但不是 null。

它必须与编码相关,但 tmpData 使用 UTF-8 并从中初始化一个字符串,它就像一个魅力,问题似乎出在我读/写文件时。

我现在头晕,你能帮我一把吗?

提前致谢:)

编辑:我刚刚尝试使用以下代码从 URL 打开一个 .txt 文件:

NSURL *url = [[NSURL alloc] initWithString:tmpField.text];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url];

NSHTTPURLResponse *response = nil;
NSError *error = nil;

NSData *responseData = [NSURLConnection sendSynchronousRequest:req
                                                     returningResponse:&response
                                                                 error:&error];
if(response == nil) {
    // TO BE CONTINUED           
}
NSInteger statusCode = [response statusCode];
NSString *contentType = [[response allHeaderFields] objectForKey:@"Content-Type"];

if(statusCode >= 200 && statusCode < 300 && [contentType hasPrefix:@"text"]) {
    NSString *payloadAsString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

我已经检查过了,程序到达了最后一行,但是 payloadAsString 是……没错,也是 nil。那我做错了什么?

【问题讨论】:

  • 尝试使用 NSMacOSRomanStringEncoding 读取文件以进行更改 - 刚刚发生在我身上,症状完全相同。
  • 按照这个建议,作为字符串“OAOAk”的内容,我收到的是“`+Ì”。我对此失去了理智,这没有任何意义,因为我没有在任何地方更改编码,“self.content”只是一个 UITextView.text。

标签: iphone objective-c


【解决方案1】:

self.content 的类型是什么?如果是NSString,则使用-[NSString dataUsingEncoding:NSUTF8StringEncoding] 方法而不是-[NSData initWithBytes:] 来获取您的NSData 对象。

【讨论】:

  • 嘿,成功了!谢谢。现在,从 url 加载文本文件时,我仍然遇到同样的问题。有什么线索吗?因为我正在使用 NSData *responseData = [NSURLConnection sendSynchronousRequest:req returnedResponse:&response error:&error]; 检索 NSData和 NSString *payloadAsString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 的字符串。再次感谢!
  • 那时我会选择使用(广泛使用和推荐的)HTTP 请求库 ASIHTTPRequest。我自己使用它并且没有响应编码问题,因为它在内部将响应数据存储为 NSData 和 NSString 对象。 allseeing-i.com/ASIHTTPRequest 了解更多信息和下载链接。
  • 感谢您的提示!如果我现在试一试,我的女朋友会把我赶出家门(而且天气很冷),所以我会把它收藏起来,明天再看。
猜你喜欢
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多