c语言怎么判断一个字符串里面有乱码?(除了汉字,字母,数字)其他的都是乱码

如题所述

乱码不太好判断, 因为是以眼睛看到为判断标准的:
你不认识的串是乱码,那程序就不好判断了,
因为 乱码也是合法的字符,你不认识而已。
现在的字符集常见有两种: GBK与UNICODE,
都是超大字符集,乱码的字符往往也是合法字符,
GBK最难判断,而UNICODE有非法码区,
我一人之见,供参考。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-29
汉字GBK编码 采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
全部编码分为三大部分:汉字区,图形符号区,用户自定义区
1. 汉字区。包括:
a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
b. GB 13000.1 扩充汉字区。包括:
(1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
(2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。

所以在判断汉字时,要采用两个字节同时检查才可以。
以下程序供参考
#include <stdio.h>
int main()
{
char str[100];
int i=0;
gets(str);
while ( str[i] )
{
unsigned char ch=str[i] ; //注意要定义为无符号
//先检查ch是否是字母:
if ( ( ch >='a' && ch<='z' ) || (ch>='A' && ch<='Z' ) )
{
i++;
continue ;
}
else
{
//再检查ch是否是数字:
if ( ch >='0' && ch <= '9' )
{
i++;
continue ;
}
else
{
//最后检查是否是汉字:(按GB 2312 汉字区检查,不考虑特殊汉字 B0A1-F7FE)
if ( ch >= 0xB0 && ch <= 0xF7 )
{
//继续检查下一个字符是否能组织成汉字
unsigned char ch1=str[i+1] ; //注意要定义为无符号
if ( ch1 >=0xA1 && ch1 <= 0xFE )
{
i+=2 ;
continue ;
}
}
}
}
printf("第%d位是乱码\n" , i+1 );
i++ ;
}
return 0;
}本回答被提问者采纳
第2个回答  2013-04-15
用判断啊用if
相似回答