问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言fseek函数如何处理中文

发布网友 发布时间:2022-05-18 21:29

我来回答

4个回答

热心网友 时间:2023-11-06 02:10

中文文件要用TCHAR之类的多字节方法处理。
你的方法是把中文看成2进制一个字符一个字符的数据文件来处理,也是可以的,fseek工作完全正常,
问题是输出字符的显示,你可以显示每个字节的值,但不能显示成肉眼可识别的汉字。
putchar ( ch ); 可用于 ASCII字符。
你可以换成: printf("%02x ", 0xff & ch ); 可以显示单个字节的码值。从输出的码值可以看出,程序没有问题,只是不能显示成肉眼可识别的汉字。
另外,如果是unicode中文文件,则文件头有不可见的文件类型区分码0xfe 0xff 或 0xff 0xfe 等等。
2个单个字节码,合成一个双字节码,有大端和小端文件问题,也许需要互相交换相邻2个字节,再显示成中文。

热心网友 时间:2023-11-06 02:11

你好,我刚好学到这个地方
我发现文字的十六进制数会比数字和符号的十六进制数要大(文字>0x7f)
可以根据这个进行判断,若ch>0x7f则用fseek再往前进1,然后顺序输出两个ch(一个ch占两字节,顺序输出两个ch就是4个字节=一个文字)
下边是我的代码:你可以参考一下
#include"stdio.h"
#define CNTL_Z '0\32'
int main()
{
FILE *ptf_r;
FILE *ptf_w;
char name[40];
char name2[40];
char ch;
char ch2;
int i;
long sum;

puts("please enter the file to process");
gets(name);
if((ptf_r=fopen(name,"rb"))==NULL)
puts("the file have nothing to process");
fseek(ptf_r,0L,SEEK_END);
sum=ftell(ptf_r);
for(i=1;i<=sum;i++)//输出数字字母

{
fseek(ptf_r,-i,SEEK_END);
ch=fgetc(ptf_r);
if(ch!=CNTL_Z&&ch!='\r')//定位到最后一个字符
if((0xff & ch)>0x7f)//判断是否为文字(文字由两个char大小构成,无论是前一个或者后一个的十六进制大小都大于字母、数字和符号)
{fseek(ptf_r,-2L,SEEK_CUR);//是,继续向前进1个字符
ch2=fgetc(ptf_r);
putchar(ch2);//先打印前一个字符
putchar(ch);//往后走打印第二个字符
++i;}//(文字占两个字符所以i要再加1)
else putchar(ch);}
putchar('\n');
fclose(ptf_r);
getchar();

return 0;

热心网友 时间:2023-11-06 02:11

为什么非得从后面往前读呢?不过话说回来,就算如此,你要能够显示中文的话弄个数组,用fgets读取就是了啊,不知道你有什么问题

热心网友 时间:2023-11-06 02:12

这个程序是想干什么的??
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
母爱作文(围绕一句话来写)900字 月经期能喝冰糖沙梨水? 石家庄火车站骗钱 五等分的新娘手游汉化安卓游戏官方下载 昆明看守所那个看守所好在 成建军行政拘留 青岛贵捷充换电设备成套服务有限公司怎么样? 合肥贵捷商贸有限责任公司怎么样? 南京贵捷物资有限公司怎么样? 上海贵捷电气有限公司产品用途 C语言中frewind, fseek, ftell怎么用? c语言中fseek函数中curpos是什么意思 C语言 文件 fseek C语言fseek 问题 C语言文件问题fseek定位 谁有电脑的sai绘图软件(●—●), 我家有数位板,电脑上有SAI的软件,以前用数位板都能画上,为什么现在不行 红米note95g灵敏度 有人物好看,剧情有点成熟的动画么?就是H点的! 喝茶提神 烤可乐鸡翅时候烤箱电功率的大小 重返禁地大结局是什么?(详细) 重返二十岁电视剧大结局项欣然在台上唱的那首歌叫什么?歌词:当我开始唱着,最熟悉的歌…… 重返十七岁结局是什么?? 重返上海滩大结局 1987年那部蒙面超人光战队(红战士....)大结局是怎样的,我看了第52集就剧终了,可那并不是大结局... 女儿自杀,父亲去世,儿子车祸,如今57岁的她不得不重返歌坛,是谁? 重返二十岁电影,结局不是奶奶唱的歌吗?怎么电视上变成孙女唱歌了 重返20岁大结局是什么,人物结局 重返哥廷根的主要内容 五年级语文试卷 炒股为什么那么难赚钱 为什么说炒股是最难的职业 五年级语文试题 五年级下学期语文试卷 被盗了,实名认证被改了。手机号也被改了。要怎么样才能找回? 刘恒易经:数字七和九代表什么 学生在宿舍玩手机家长怎么处理 麻烦哪个好人帮我设计一个字母A的非主流网名 一星珠是做什么用的??? 这是什么珠 空之轨迹FC红叶亭的书在哪里? 石灯笼在墓地上怎么摆放? 海信电视能接5g信号吗 哪个牌子智能电视支持2.4.和5G双苹信号 海信智能电视支持5G Wifi网卡吗? 湖南省怀化市公务员考试地点在什么地方 谁知道2013年怀化市公*(4月的省考)是在哪个医院体检的? 湖南省公*怀化市报名专业填错 审查未通过无法修改怎么处理 在线急求帮助 湖南怀化公务员一般什么时候上班啊,怎么今年四月考的,前几天才公示,是不是还要等几个月?