c语言中文编码的问题

Python010

c语言中文编码的问题,第1张

输入可以采用GB2312或者GBK编码,如果繁体,就用UTF-8

读入汉字,从文件或者标准输入读,每次读一个字节,依次存入数组

如果可以确定是全部汉字,那么可以一次读入两个字节

结束符可以用\0,但是由于双字节汉字编码低位可能是0 所以结束符要用双\0

针对英文字符和汉字混合的情况,可以这样判断

每次读入一个字符,如果该字符大于0x80 则这是一个汉字的高位,继续读入并存储

如果该字符小于0x80 则这是一个英文字符,直接存储

do

read one byte

check

if >0x80 read next

save

while(!end)

大致这样

直到读入约定的end标志,可以是\n 可以是eof

第一题:#includeintmain(intargc,char**argv){char*in="in.txt"char*out="out.txt"FILE*fpin,*fpoutintarr[50]={0}charchintnum=0fpin=fopen(in,"rb")if(!fpin){printf("Unabletoopen'%s'.\n",in)return1}while((ch=fgetc(fpin))!=EOF){if(ch==''||ch=='\n'){if(num<=50){arr[num]+=1}num=0continue}num=num*10+(ch-'0')}fclose(fpin)fpout=fopen(out,"wb")if(!fpout){printf("Unabletoopen'%s'.\n",out)return1}for(num=0num<50++num)fprintf(fpout,"NU.:%dtimes:%d\n",num,arr[num])fclose(fpout)return0}

可以得到汉字的每个字节的ASCII码(内码)值,也可以得到它们的区位码:

#include<stdio.h>

int main()

{unsigned char s[11] int i,a,b

printf("请输入姓名:")

gets(s)

printf("汉字\tASCII码\t\t内码\t区位码\n")

for(i=0s[i]i+=2)

{ a=s[i] b=s[i+1]

printf(" %c%c :\t%d %d\t\t%X%X\t%d",a,b,a,b,a,b,a-160)

if(b<170)printf("0%d\n",b-160)

else printf("%d\n",b-160)

}

system("pause")

return 0

}