无法使用stringWithContentsOfFile从文件中获取正确的数据

无法使用stringWithContentsOfFile从文件中获取正确的数据

问题描述:

我一直在解决这个问题几个小时,但我仍然无法得到它的工作。我已经尝试了所有我在*上找到的解决方案,但没有任何工作。下面是我的代码:无法使用stringWithContentsOfFile从文件中获取正确的数据

- (void)viewDidLoad { 
[super viewDidLoad]; 

// Do any additional setup after loading the view. 
NSFileManager *fileManager; 
NSString *currentPath; 
NSString *content; 
content = [[NSString alloc] init]; 

NSString *filename; 
filename = @"/Tasty Noodle House.xlsx"; 

fileManager = [NSFileManager defaultManager]; 
currentPath = [fileManager currentDirectoryPath]; 

NSError* error; 
content = [NSString stringWithContentsOfFile:[currentPath stringByAppendingString:filename] encoding:NSUTF16LittleEndianStringEncoding error:&error]; 

NSLog(@"current path: %@",currentPath); 
NSLog(@"filecontent: %@",content); 
NSLog(@"error: %@", error); 

}

我已经检查的路径是正确的,该文件确实存在,在这条道路(currentPath)。但是,问题是,行NSLog(@“filecontent:%@”,内容);根本不打印出来。打印输出如下所示:

2016-01-23 11:30:11.367 ScaryBugsMac[1377:222946] current path: /Users/username/Library/Developer/Xcode/DerivedData/ScaryBugsMac-buobqwjccigdqthjejrzmgasnzyf/Build/Products/Debug 
2016-01-23 11:30:11.367 ScaryBugsMac[1377:222946] error: (null) 

根据我的经验,它应该打印出至少“filecontent:(空)”,但它是很奇怪的没有得到打印出来。

我也使用enconding尝试:NSUTF8StringEncoding,它给我的错误:其他

2016-01-23 11:32:44.708 ScaryBugsMac[1404:230157] current path: /Users/username/Library/Developer/Xcode/DerivedData/ScaryBugsMac-buobqwjccigdqthjejrzmgasnzyf/Build/Products/Debug 
2016-01-23 11:32:44.708 ScaryBugsMac[1404:230157] filecontent: (null) 
2016-01-23 11:32:44.709 ScaryBugsMac[1404:230157] error: Error Domain=NSCocoaErrorDomain Code=261 "The file “Tasty Noodle House.xlsx” couldn’t be opened using text encoding Unicode (UTF-8)." UserInfo=0x60000007a740 {NSFilePath=/Users/username/Library/Developer/Xcode/DerivedData/ScaryBugsMac-buobqwjccigdqthjejrzmgasnzyf/Build/Products/Debug/Tasty Noodle House.xlsx, NSStringEncoding=4} 

两件事情:

  1. 我已经尝试了所有的编码和问题下降成上述两种情况之一。

  2. 我可以在我的Mac上使用Excel打开xlsx文件,没有任何问题。所以我不认为这个文件有什么问题。

我真的很感激任何帮助,谢谢!

更有可能的是,文件内容被压缩(IIRC,XLSX定义允许内容被直接压缩)。

或者在文件中有一些字符实际上导致它被认为是损坏的。

将它加载到NSString中可能没有那么有用。如果它被压缩,你需要首先解压缩它。如果它确实是一个XLSX文件,那么您至少需要使用XML阅读器来读取内容(并且更好的是,有些可能已经存在的可以读取所述文件内容的开源库)。

+0

谢谢!我将去查找和解析excel文件的开源工具objective-c –

Excel .xlsx文件包含二进制数据。 .xlsx文件与软件包捆绑相似。

它不包含纯文本,因此它不能被编码为NSString

+0

谢谢您的回答! –