char-c语言文件读取汉字及汉字编码的问题

问题描述

c语言文件读取汉字及汉字编码的问题
先贴程序
#define _CRT_SECURE_NO_WARNINGS

#include

using namespace std;
int main(void)
{
char ch;
FILE *f;
int i = 0;
int count = 0;
f = fopen(""test.txt""r+"");
while ((ch = getc(f)) != EOF)

{

fseek(f i SEEK_SET);

putc(~ch f);

i++;
fseek(f i SEEK_SET);

count++;
}
fclose(f);
printf(""文件操作已经完成n"");
printf(""共处理%d个字节n"" count);
printf(""按任意键结束程序n"");
getchar();
return 0;
}

该程序实现的就是对文件内的字符进行取反,就是简单的加密,再取反一次就变回原样了,也就是解密
在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就变成了四个!进行一次加一次,但是其他的汉字目前没发现错误,不知道是怎么回事,难道王字的编码就是三个字节吗?
求大家解答一下,我是新人没有一个c币。。。如果以后我得到了,就追加给你,谢谢啦

解决方案

  • 简单来说,是汉字编码的问题。在Windows里,我们生成的txt文件最有可能是是GBK编码的。它的特点是每个汉字2个字节。没有例外。但是也有可能是Unicode用UTF-8来编码的,对于用Utf-8来编码的话,每个汉字就用3个字节来表示。另外,对文本文件文本,有可能会带上编码前缀那样的话直接读取会多读到几个字节(其实就是前缀)
  • 以王字为例
  • 如果是GBK(或者GB2312),表示为CD F5
  • 如果以UTF-8,表示为E7 8E 8B
  • 如果是以Unicode表示,不带前缀为8B 73,带前缀为FF FE 8B 73

解决方案二:
首先要看文件的编码格式,如果是GBK或者unicode编码,则汉字是2个字节存储,如果是UTF8,则是3个字节。

解决方案三:
可能是存储格式问题,记事本默认的编码为ANSI

时间: 2024-08-03 22:53:16

char-c语言文件读取汉字及汉字编码的问题的相关文章

c语言-C语言文件读取问题,求帮忙看看

问题描述 C语言文件读取问题,求帮忙看看 想用程序实现输入一个人姓名和电话号码并写入文件,然后读取显示文件中的数据. 但输出如图:输出最后两个重复,不知是哪里出错,求大神帮忙看看. 程序代码如下: #include #include #include #include typedef struct man { char name[20]; char first_name[20]; long phone_number; } man; int main(void) { FILE* pfile=NUL

c语言-C语言文件读取的问题。

问题描述 C语言文件读取的问题. #include int main() { int n; FILE *fp; FILE *qw; int i; int j; qw=fopen("out.txt","w"); fp=fopen("Din.txt","r"); fscanf(fp,"%d",&n); if (fp==NULL) { printf("n文件打开失败!n"); } fo

c语言 算法 文件读取-C语言文件读取遇到的问题

问题描述 C语言文件读取遇到的问题 原题是:输入一个正整数n,然后读取n个正整数,最后再读取一个正整数m,统计有多少整数小于m.代码如下, int main() { FILE *fin,*fout; fin = fopen("data.in","rb"); fout = fopen("data.out","wb"); int n,x,m,i,count = 0; fscanf(fin,"d",&n)

c 文件读写-在C语言中读取闻见为UTF-8的汉字,英文混合的文件,又甚么函数可以不出现乱码

问题描述 在C语言中读取闻见为UTF-8的汉字,英文混合的文件,又甚么函数可以不出现乱码 注意:是函数! 我要提取其中的汉字信息,如何是分配的内存不会有乱码 memset fgets fread fseek这几个函数除外的函数 解决方案 搜一下, utf8转unicode 解决方案二: 这应该和编译的文本有关,我编写java时也遇到这情况 解决方案三: dos窗口的编码好像是默认的编码,所以如果现实utf-8字符好像会出问题,可以读取出来再写到文件里,看看是否是要读的数据,如果是,说明是编码问题

c语言-C语言 文件读写fscanf 不能读取文件第一行

问题描述 C语言 文件读写fscanf 不能读取文件第一行 我在做USACO的训练题 按照要求写了个读文件的程序,但是出了一点我不能理解的bug 希望老师指点指点 程序: int main () { char comet[6]; char group[6]; FILE *input; input=fopen ("ride.in", "r"); fscanf (input, "%sn%s", comet, group ); \fscanf (inp

代码-使用C语言1. 读取一个.C文件,删除该文件中所有的注释语句

问题描述 使用C语言1. 读取一个.C文件,删除该文件中所有的注释语句 读取一个.C文件,删除该文件中所有的注释语句.然后写入到新的.C文件里. 要求: 删除注释语句功能采用动态链接库形式 在功能实现的基础上: --单元测试要足够充分 --要通过所有的MISRA C的检查 --代码要符合代码规范. 解决方案 #include int main() { FILE *fp,*fp1; char str[99]=""; int i=0; fp=fopen("test.c"

wireshark c 文件读取-怎么用C语言读取WireShark捕获的数据包文件

问题描述 怎么用C语言读取WireShark捕获的数据包文件 怎么用C语言读取WireShark捕获的数据包文件,要求能分析出以太网头部,Ip头部,TCP头部,并提取出数据部分,下面是我写的一段代码,但是读的不对,希望高手指点//.pcap文件//#ifndef xiaohouzi//#define xiaohouzi#ifndef LITTLE_ENDIAN#define LITTLE_ENDIAN (1)#include typedef unsigned int bpf_u_int32;ty

文件操作-c语言实现txt文件读取

问题描述 c语言实现txt文件读取 VC编译器下c语言没有办法打开TXT文件.代码如下:#include #includevoid main() { FILE *fp; if((fp=fopen(""C:UsersAdministratorDesktopad.txt""r""))==NULL) { printf(""cannot open the file!""); exit(0); } else prin

GO语言常用的文件读取方式_Golang

本文实例讲述了GO语言常用的文件读取方式.分享给大家供大家参考.具体分析如下: Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查. 一次性读取 小文件推荐一次性读取,这样程序更简单,而且速度最快. 复制代码 代码如下: func ReadAll(filePth string) ([]byte, error) {  f, err := os.Open(filePth)  if err != nil {   return nil, err  }  return iout