我正在尝试将文本文件读入NSString。一些非常奇怪的事情正在发生,因为似乎代码将整个文本加载到NSString中(长度是正确的),但是当我NSLog字符串内容时它只显示第一个字符。
NSError *error;
NSStringEncoding encoding = 0;
NSString *textFile = [[NSString alloc] initWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:&error];
if (error) {
NSLog(@"%@", [error localizedDescription]);
} else {
NSLog(@"TEXT length %lu", (unsigned long)textFile.length);
NSLog(@"TEXT %@", textFile);
}
这会将以下内容记录到控制台:
2014-02-14 14:46:21.308 iCaching[4055:303] TEXT length 4968
2014-02-14 14:46:37.630 iCaching[4055:303] TEXT G
但是当我将NSString拆分为由换行符分隔的子串数组时,它会返回正确数量的字符串。但是记录这些子串的内容再次为空。
if (textFile && !error) {
NSArray *visitsArray = [textFile componentsSeparatedByString:@"\n"];
NSLog(@"visits count %lu", (unsigned long)[visitsArray count]);
此日志:
visits count 63
查看调试器首先会显示@“G”的内容,
但使用quicklook显示NSString的完整(正确)内容。
有什么想法吗?
答案 0 :(得分:4)
(来自我上面的评论:) 文本可能是UTF-16编码的,因此每隔一个字节为零。试试NSUTF16StringEncoding
或其中一个小/大端变体。
答案 1 :(得分:0)
我认为你的文件有UNICODE编码。
在UNICODE中,chacacters有两口。 “G”写为0x47,0x00。
您的读取文件为UTF-8。对于UTF-8,'G'到达终点后。
尝试使用NSUnicodeStringEncoding
。