字符编码基础知识与判断中文字符方法

完整版字符编码基础知识:https://blog.csdn.net/beyondqd/article/details/6947764

简单摘要:

1, 常用字符集分类
ASCII及其扩展字符集
作用:表语英语及西欧语言。
位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。
范围:ASCII从00到7F,扩展从00到FF。
ISO-8859-1字符集
作用:扩展ASCII,表示西欧、希腊语等。
位数:8位,
范围:从00到FF,兼容ASCII字符集。
GB2312字符集
作用:国家简体中文字符集,兼容ASCII。
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。
范围:高字节从A1到F7, 低字节从A1到FE。将高字节和低字节分别加上0XA0即可得到编码。
BIG5字符集
作用:统一繁体字编码。
位数:使用2个字节表示,表示13053个汉字。
范围:高字节从A1到F9,低字节从40到7E,A1到FE。
GBK字符集
作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312。
位数:使用2个字节表示,可表示21886个字符。
范围:高字节从81到FE,低字节从40到FE。
GB18030字符集
作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。
位数:它采用变字节表示(1 ASCII,2,4字节)。可表示27484个文字。
范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39。
UCS字符集
作用:国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容。
位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。
范围:目前,UCS-4只是在UCS-2前面加了0×0000。
UNICODE字符集
作用:为世界650种语言进行统一编码,兼容ISO-8859-1。

位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。

2,编码识别
UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法BOM:
UTF-8: EFBBBF (符合UTF-8格式,请看上面。但没有含义在UCS即UNICODE中)
UTF-16 Big Endian:FEFF (没有含义在UCS-2中)
UTF-16 Little Endian:FFFE (没有含义在UCS-2中)
UTF-32 Big Endian:0000FEFF (没有含义在UCS-4中)
UTF-32 Little Endian:FFFE0000 (没有含义在UCS-4中)

GB2312:高字节和低字节的第1位都是1。

BIG5,GBK&GB18030:高字节的第1位为1。操作系统有默认的编码,常为GBK,可以下载别的并升级。通过判断高字节的第1位从而知道是ASCII或者汉字编码。


实际代码:转自:https://blog.csdn.net/lizhi200404520/article/details/7611849

//返回0:无中文,返回1:有中文

int IncludeChinese(char *str)
{
   int nRet = 0;
   char c;
   while(c=*str++)
   {
  //如果字符高位为1且下一字符高位也是1则有中文字符
  if( (c&0x80) && (*str & 0x80) )
  {
  nRet = 1;
  break;
  }
   }
   return nRet;

}


对于Unicode可以采取下边方法:转自:https://blog.csdn.net/Panda_m/article/details/40454413

Unicode扩展自ASII字符集,ASII每个字符使用8位(或7位)来表示,Unicode使用16位字符集,前128个Unicode字符(0x0000-0x007f)就是ASCII字符,中文占用了0x4e00-0x9fbb的编码。(Windows NT从底层支持Unicode。)C语言貌似天生被ASCII所限制,不过她能通过对宽字符集的支持来支持Unicode,宽字符不一定是Unicode,Unicode应该只是一种可能的宽字符集。

string c=Console .ReadLine ();  
  
for (int i = 0; i < c.Length; i++)  
  
    if (c [i]>= 0x4e00 && c [i]<= 0x9fbb)  
        Console.WriteLine("是汉字");  
    else  
        Console.WriteLine("不是汉字"); 

还有一种方法。。ASCII的扩展字符(128-255)中有包含汉字,但是。。毕竟不严谨比如说输入一个π它会告诉你这是汉字。

string c=Console .ReadLine ();  
  
            for (int i = 0; i < c.Length; i++)  
              
                if (c [i]>128)  
                    Console.WriteLine("是汉字");  
                else  
                    Console.WriteLine("不是汉字");  
   
                Console.ReadKey  ();  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值