关于NSFileHandle的问题,Obj-C

问题描述 投票:0回答:2

我现在正在使用文件处理Obj-C,我的应用程序应读取一些字符编码为UTF16的大型文本文件(例如5 MB)。第一个问题是如何检测要读取的文件大小?

第二个问题是,当我仅一次读取文件时,它给了我正确的文本,但是当我尝试寻找或读取另一次时,它不会给我我的原始文本,这是我的代码段:] >

NSFileHandle * sourceFile;

NSData * d1;

NSString * st1,* st2 = @“”;

sourceFile = [NSFileHandle fileHandleForReadingAtPath:filePath]; //我的文件大小为5 MB

for(int i = 0; i <500; i ++){

d1 = [源文件readDataOfLength:20];

st1 = [[NSString alloc] initWithData:d1编码:NSUTF16StringEncoding]; //将原始数据转换为UTF16字符串

st2 = [st2 stringByAppendingFormat:@“%@”,st1];

st1 = @“”;

}

[[sourceFile closeFile];

执行此命令后,st2将携带一些字符串,并且此字符串将具有一些清晰的字符(如原始文件中的字符),但是随后它将携带一堆不清楚的字符(例如䠆⠆䀆䀆䀆ㄆ䌆✆⨆䜆)..我并没有整夜都在努力想弄清楚,但是::]

我现在正在处理带文件的Obj-C,我的应用程序应读取一些字符编码为UTF16的巨大文本文件(例如5 MB)。第一个问题是如何检测所...

objective-c encoding nsfilehandle
2个回答
1
投票

@ Neovibrant:对不起,您错了,但UTF-16并非每个字符总是2个字节(或16位)。如您在Wikipedia文章中所见,对于U + 10000以上的所有字符,它可以为4个字节...因此,仅注意偏移量是不够的,因为您可以由此截断4个字节的字符。最好的方法始终是使用正确的编码,然后将其留给文件管理器确定字符的大小。


0
投票

要获取文件大小,您只需使用NSFileManager:

© www.soinside.com 2019 - 2024. All rights reserved.