1.txt文件内容:你好a,我是千叶!期望结果:你好aC#includemain(){FILE*fp;fp=fopen("1.txt","r");charx[1000];fread(x,sizeof(char),7,fp);//length=7,对于现在的1.txt结果正确,如果1.txt变成纯中文的文件,第三个汉字就会被截断,请问要怎么处理呢?printf("%s",x);}====================================================================================我的场景是文件比较大,不太想把整个文件读取到NSData或者NSString,所以希望NSData读取部分数据,再转化成NSString,于是就遇到了中文字符截取出现问题的情况。看了大家的回答,发现这个问题可能是个伪命题,毕竟文件的偏移是按字节算的不会去考虑文件字符编码。之前提了一个问题在Object-c节点,没有人回答所以想看看用C能不能解决,原问题:http://segmentfault.com/q/1010000002530834?_ea=128095
2 回答

缥缈止盈
TA贡献2041条经验 获得超4个赞
提供个思路:读取文件,你必须知道字符编码生成NSString对象,NSString有个初始化方法是initWithData:encoding:,然后NSData有个初始化方法是dataWithContentsOfFile:确保步轴2正常生成对象后,调用NSString的成员方法:substringWithRange:进行截取希望能帮到lz

桃花长相依
TA贡献1860条经验 获得超8个赞
问题的重点在于:ANSI编码的条件下,一个汉字占两个字节,一个英文字符占一个字节。那么对于你说的例子://1.txt你好a,我是千叶!^^^^^//"你好a",数一数,是5个字节。所以如果你想截取"你好a",那么使用:cfread(x,sizeof(char),5,fp);printf("%s\n",x);//输出"你好a"如果全是中文,例如://1.txt你好啊,我是千叶!^^^^^^//三个汉字是6个字节那么你如果想要汉字不被截断,至少应该读取偶数个字节。cfread(x,sizeof(char),6,fp);printf("%s\n",x);//输出"你好啊"
添加回答
举报
0/150
提交
取消