为了账号安全,请及时绑定邮箱和手机立即绑定

C语言或OC或C++ 中英文混合的文件读取前3个字符怎么做?

C语言或OC或C++ 中英文混合的文件读取前3个字符怎么做?

ITMISS 2019-04-07 11:18:16
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
                            
查看完整回答
反对 回复 2019-04-07
?
桃花长相依

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);//输出"你好啊"
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 391 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号