为什么我想把汉字去除却出现乱码?(附程序)

来源:百度知道 编辑:UC知道 时间:2024/05/24 14:36:00
#include <stdio.h>
#include <ctype.h>
void main()
{
char buff;
FILE *stp,*otp;

stp=fopen("E:\\share\\CD2\\1.txt","r");
otp=fopen("E:\\share\\CD2\\copy.srt","w");

if(stp==NULL||otp==NULL)
{
printf("error");
}

while(!feof(stp))
{
{
buff=fgetc(stp);
if(isalnum(buff)||isdigit(buff)||iscntrl(buff)||isprint(buff))

fputc(buff,otp);

}
}
fclose(stp);
fclose(otp);

}

应该是if语句那里的问题,如果不写那句,是整篇全部复制过来,写了之后。是原来的中文变成了乱码,其他的英文和字符之类的还完好

这与你的文件和汉字编码有关。

如果是 国标 编码, 双字节大于 0xA0A0 的是汉字编码。

如果是 unicode 编码, 中西文都是双字节编码,应当两个两个字节读入,根据编码 范围,虑掉中文码。用你的if,判断不了双字节编码。例如,北 字,国标 编码 0xb1b1, unicode 0x5317. 例如 别 字,unicode 0x522b,按你的 if, 保留一个字节 0x52, 去掉一个字节 0x2b 就变坏码。