JuniorWizard 2015-04-23 02:54 采纳率: 50%
浏览 4832
已采纳

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币。。。如果以后我得到了,就追加给你,谢谢啦

  • 写回答

3条回答 默认 最新

  • 知常曰明 2015-04-23 03:22
    关注
    • 简单来说,是汉字编码的问题。在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
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题