使用NSFileHandle读取文件中指定位置的指定长度,内容为中文的txt是乱码

时间:2021-09-22 10:41:13
使用NSFileHandle读取文件中指定位置的指定长度,内容为中文的txt是乱码

//到本地读取相关书籍(先显示第一页的,然后可以再上一页下一页)  路径、当前页、读取的文件字节数(每页显示的)
-(void)bookName:(NSString *)name bookcurrent:(NSInteger)bookcurrentPage bookpageEvery:(NSInteger)pageEveryByte {
    //文件路径
    NSString *bookpathname = [NSString stringWithFormat:@"Documents/%@",name];
    NSString *filename = [NSHomeDirectory() stringByAppendingPathComponent:bookpathname];
    //读取数据
    NSFileHandle *filehand = [NSFileHandle fileHandleForReadingAtPath:filename];
    //将光标定位到要读取的开始位置
    [filehand seekToFileOffset:bookcurrentPage * pageEveryByte];
    //读取的每页数据
    NSData *chunk = [filehand readDataOfLength:pageEveryByte];
    //将读取的数据进行转换
    NSString * line = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
    //将读取出来的数据读取到控件上
    textview.text = line;
}

如上代码,line为乱码,有时为null,请问怎么回事? 

6 个解决方案

#1


本地文件的内容是什么编码的?
NSString * line = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
如果文件内容不是UTF8的就会出问题了.

#2


引用 1 楼 bestoml 的回复:
本地文件的内容是什么编码的?
NSString * line = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
如果文件内容不是UTF8的就会出问题了.



怎么看编码啊,我怎么看不到,我本来新建一个rtf类型的文件,强制改后缀名为txt,读出来乱码。后来新建一个rtf类型文件读取,也还是乱码,试了NSUTF8StringEncoding\NSASCIIStringEncoding都不行

#3


我应代码创建一个utf8格式的txt,然后用NSFileHandle读取,只有一次是可以的,但后来就都不行了。如果用NSFileManager读取全部时,是可以的,这个NSFileHandle读取中文真烦啊

#4


用文本工具 保存的时候以UTF-8的格式保存 然后读取这个文件 你看看是否还是乱码.......

#5


引用 4 楼 kuqideyupian 的回复:
用文本工具 保存的时候以UTF-8的格式保存 然后读取这个文件 你看看是否还是乱码.......


在苹果电脑上,保存文本时,根本就没看到有 选择文本格式  这一项,就直接保存了,所以不知道什么格式。
我在XP上保存了UTF8格式的文本,然后拷到苹果电脑上,读取,还是乱码,要么就null。。。

#6


你使用十六进制查看工具查看下文件,数据有没有问题;
另外,注意下,UTF8, Unicode格式数据是否包含了标志位, 类似FF FE这样的东西,是否需要去掉读取。

#1


本地文件的内容是什么编码的?
NSString * line = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
如果文件内容不是UTF8的就会出问题了.

#2


引用 1 楼 bestoml 的回复:
本地文件的内容是什么编码的?
NSString * line = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
如果文件内容不是UTF8的就会出问题了.



怎么看编码啊,我怎么看不到,我本来新建一个rtf类型的文件,强制改后缀名为txt,读出来乱码。后来新建一个rtf类型文件读取,也还是乱码,试了NSUTF8StringEncoding\NSASCIIStringEncoding都不行

#3


我应代码创建一个utf8格式的txt,然后用NSFileHandle读取,只有一次是可以的,但后来就都不行了。如果用NSFileManager读取全部时,是可以的,这个NSFileHandle读取中文真烦啊

#4


用文本工具 保存的时候以UTF-8的格式保存 然后读取这个文件 你看看是否还是乱码.......

#5


引用 4 楼 kuqideyupian 的回复:
用文本工具 保存的时候以UTF-8的格式保存 然后读取这个文件 你看看是否还是乱码.......


在苹果电脑上,保存文本时,根本就没看到有 选择文本格式  这一项,就直接保存了,所以不知道什么格式。
我在XP上保存了UTF8格式的文本,然后拷到苹果电脑上,读取,还是乱码,要么就null。。。

#6


你使用十六进制查看工具查看下文件,数据有没有问题;
另外,注意下,UTF8, Unicode格式数据是否包含了标志位, 类似FF FE这样的东西,是否需要去掉读取。