NSString似乎是空的,但不是

时间:2014-02-14 14:01:40

标签: objective-c macos nsstring

我正在尝试将文本文件读入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”的内容,

enter image description here

但使用quicklook显示NSString的完整(正确)内容。

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

(来自我上面的评论:) 文本可能是UTF-16编码的,因此每隔一个字节为零。试试NSUTF16StringEncoding或其中一个小/大端变体。

答案 1 :(得分:0)

我认为你的文件有UNICODE编码。 在UNICODE中,chacacters有两口。 “G”写为0x47,0x00。 您的读取文件为UTF-8。对于UTF-8,'G'到达终点后。 尝试使用NSUnicodeStringEncoding