在将汉字存入文件时,遇到了乱码问题,新手求大佬帮助

qq_36691087 2018-07-07 08:57:10
这是我的代码,txt文件采用的是ANSI编码
#include<stdio.h>
int main()
{
FILE *f = fopen("D:\\errortest.txt", "a+");
fputs("猫",f);
printf("结果保存完毕\n");
fclose(f);
}
是一个简单的存储汉字,a+参数是追加内容
但是如果文件为空的情况,并且第一个存储的汉字是“猫”或者“猫猫”这种连续的以猫为内容的字符串
存入的文件就会出现乱码,如图

如果文件不为空,且第一个存储的汉字不是“猫”,都不会出现乱码
而且如果在“猫”字乱码的基础上,再次存入一个其他汉字,猫的乱码就会恢复


...全文
198 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sghcpt 2018-07-09
  • 打赏
  • 举报
回复
楼主,在我本地测试发现如下:
1)“但是如果文件为空的情况,并且第一个存储的汉字是“猫”或者“猫猫”这种连续的以猫为内容的字符串存入的文件就会出现乱码” -->这种情况,内容保存在txt文件中是已utf-8的格式保存的,所以你使用记事本打开时,会显示乱码。如果你使用notepad++使用ANSI编码打开时,显示的就是猫或者猫猫。
2) "如果文件不为空,且第一个存储的汉字不是“猫”,都不会出现乱码" -->这种情况,例如第一个字是狗字,那么保存到文件中的内容的编码是ANSI编码的,所以你使用记事本打开的时候,显示没有乱码。
3)"如果在“猫”字乱码的基础上,再次存入一个其他汉字,猫的乱码就会恢复" -->这种情况例如第一个字是猫字,这是保存的内容的编码是utf-8的编码格式,但输入第二个字,例如为狗字时,保存的内容“猫狗”的编码确实ANSI编码格式了,所以使用记事本打开时,显示没有乱码。

猜测原因:应该是系统会根据你写入文件的内容而动态的改变内容的编码格式,来寻求存储方面的最优化。
qq_36691087 2018-07-09
  • 打赏
  • 举报
回复
谢谢你们,大致了解了
赵4老师 2018-07-09
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
老马何以识途 2018-07-08
  • 打赏
  • 举报
回复
我估计,当后一种情况的时候,实际上文件头已经标明了UTF编码,比如是EF BB。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧