参考:

http://baike.baidu.com/view/391899.htm?fr=aladdin

http://baike.baidu.com/view/1204863.htm

http://baike.baidu.com/view/40801.htm?fr=aladdin

http://baike.baidu.com/subview/185282/6215666.htm?fr=aladdin

http://bbs.csdn.net/topics/300045872

http://bbs.chinaunix.net/thread-1237260-1-1.html

http://bbs.csdn.net/topics/290003569

http://tieba.baidu.com/p/1731917689

http://bbs.csdn.net/topics/360228774

GB2312编码表:http://wenku.baidu.com/link?url=p86K97LL1MPih8Iz73iYJsNfyDrHPFXn_63f-MMdrsLf5lgL-1wWBOJjbbm0N9AI8Qe1sl3cNzwRqGQJWO4seiiSH6bRY5ENDpbOFdh28Tu

输入的字符串编码是什么?

Unicode/GBK/gb2312/gb18030/UTF-8

不知道编码来判断是不是中文,只能是猜,不能完全给出正确结果.
这个就是编码的自动识别了,只有先识别了是什么编码的文本,才能针对性的去判断是否为中文。

基本思路是

1.判断当前文本的编码

2.判断出来后,读入字符串中并把它统一转换成unicode或者utf-8的字符串。

3.根据unicode或者utf-8的编码中中文字符的编码范围来判断每个字符是不是中文。

这里面最难的是第一条,这个最成功的典范是ie,firefox这些浏览器中编码识别的实现。基本思路是猜,因为BOM是可以改的,甚至可以没有。

因此靠bom等来识别编码是错误的思路。。只能是猜,基于某种算法来猜,只要算法合理则基本上不会出错,但不可能是100%,你看有时候ie看网页

不是也会乱码啊,那就是猜错了。。。

因为firefox是开源的,所以判断编码的源代码在网上有下的,你找找看。

分析一下:

问题:用C++判断字符串是否为中文
简化:判断字符串是否为中文
这个问题本身就有问题.你们谁能说他有本事判断给定的字符串是否为中文?
首先 
中文是一中编码,而UNICODE是一种格式.
编码是要表示实际东西的,而UNICODE是一种传输用的方式;
如果说编码是犯人,0001代表某某,那么UNICODE就是犯人带的刑具
一个带了刑具的犯人,你咋知道他是那个国家那种级别的罪犯呢???
其次
对于提问者,首先你要告诉别人你的字串是UNICODE的还是ANSI的.
因为网络传输的是一堆数据,比如文件,他们都在开始的信息里标识了是UNICODE还是普通的ANSI
你一个单独的字串,没有标识,你不说明,能知道是UNICODE还是ANSI的人肯定是江湖骗子
再次

即使知道是UNICODE的串,也要去掉伪装,还原成ANSI才能判断的.

如果是UNICODE的
先转ANSI再判断

处理完成了需要用UNICODE的
在重新转ANSI就行了

就象IP包一样
接收-->解析-->处理--打包-->发送

这个时候的判断也很简单
GB2312中文的表示是用两个字节,都大于0xa1;
取得一个字节,如果大于0xa1,再取一个字节,如果还大于0xa1,就是汉字
char  *kk="adjg竟关千5667六爱123\0";
char  *p=kk;
while(*p)
{
   if((*(p+1)==NULL)||*p<0xa1||*(p+1)<0xa1)
   {
       //独1字节或连续两字节有一个<0xa1,肯定不是汉字
       //当普通字符处理
       p++;
   }
   else
   {
       //处理汉字
       p+=2;
   }

}

在GB2312编码中,高字节和低字节的编码范围都是0xa1-0xfe ,而第一个字节大于0xa1的未必就是汉字,汉字的取值范围应该是从0xb0a1至0xf7fe。

int main()
{

string str = ",在过几天,我就要看完《C++程序设计》这本书了;心里很激动!想放松放松。";
    size_t n=0;
    size_t count=0;
    unsigned char c1,c2;
    setlocale(LC_ALL,"");
    while(n<str.size()-1)
    {
        count=mblen(&str[n],2);
        if (count==1) 
            str.erase(n,1);//earse函数的使用:删除从index索引开始的num个字符, 返回*this.
        else
        {
            c1=(unsigned char)str[n];
            c2=(unsigned char)str[n+1]; //这段程序是根据GB2312编码来的,下面的范围都是其中非汉字的编码范围,可以查看相应的编码表
            if (((c1>=0xa1&&c1<=0xa9)&&(c2>=0xa1&&c2<=0xfe))||
                ((c1>=0xa8&&c1<=0xa9)&&(c2>=0x40&&c2<=0xa0)))
                str.erase(n,2);
            else
                n++;
        }
    }
    
    system("pause");
    return 0;

}

运行结果:

C++判断字符串中是否有中文相关推荐

  1. java判断字符串中是否包含中文 过滤中文

    package com.test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class Test {@ ...

  2. 判断字符串中是否包含中文

    判断字符串中是否包含中文 select case when 'y我' like '%[啊-座]%' then '包含中文 ' else '不包含中文 ' end 转载于:https://www.cnb ...

  3. java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文

    java判断字符串中是否包含中文并过滤掉中文,具体内容如下 1.判断字符串中是否包含中文方法封装 /** * 判断字符串中是否包含中文 * @param str * 待校验字符串 * @return ...

  4. JAVA判断字符串中是否包含中文汉字

    汉字的Unicode范围扩展了好多次了,网上的各种判断正则都是之前的,漏了很多 汉字 下面是最新的最全的判断正则 /*** 判断字符串中是否包含中文汉字** @param content* @retu ...

  5. java 判断 中文字符_java中判断字符串中是否有中文字符

    package com.meritit.test; public class TestChart { public static void main(String[] args) throws Exc ...

  6. php字符是汉字还是字符,php判断字符串中是否包含中文汉字和获得字符串中的汉字...

    一,判断全是中文 $str="'324是中国人"; if(!eregi("[^\x80-\xff]","$str")){ echo &quo ...

  7. pgsql 筛选中文字符正则_PostGreSql 判断字符串中是否有中文的案例

    我就废话不多说了,大家还是直接看代码吧~ 实例 imos=# select 'hello' ~ '[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]'; ? ...

  8. qt 判断字符串中是否含有中文字符_Qt 中文字符串问题

    一. Qt5假定的执行字符集是UTF8,不再允许用户擅自改动.这样一来,Qt4中setCodecXXX的各种副作用不再存在,而且中文问题更为简单. QString s1 = "汉语" ...

  9. java 判断是否包含中文_Java中判断字符串中是否包含中文汉字

    一般在用户登录时需要判断用户名是否为中文汉字,可以使用正则表达式,来匹配字符是否包含中文,中文通配符为[u4e00-u9fa5]匹配中文,下面为大家分享一下使用Matcher来解决此问题. 代码如下: ...

最新文章

  1. STM32F103 与 STM32F407引脚兼容问题
  2. 使用驱动器f:中的光盘之前需要将其格式化_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...
  3. 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
  4. Fastai-数据准备
  5. spring mvc学习(40):restful的crud实现增加方式
  6. pythonwebview自动化测试_GitHub - githubwzg/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...
  7. 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载(内附加2.7.5版本微擎)支持多种CPS收益和流量主收益
  8. 反编译工具Depends---dll和exe反编译工具
  9. 计算机组策略无法编辑,win7系统无法打开本地组策略编辑器的解决方法
  10. 欢迎来到Wagtail的文档
  11. linux修改键盘布局
  12. centos 6.5安装步骤
  13. 2. 输出2~100之间的素数
  14. FT1248程序(FT232H,FT220X)
  15. 月亮代表我的心计算机谱子,月亮代表我的心
  16. 使用shp数据批量裁剪栅格数据并统计均值
  17. 谈我的算法工程师校招经历
  18. B/S、C/S、 A/S
  19. 【Spine】眨眼动画
  20. python HTTPConnectionPool(host:XX)Max retries exceeded with url

热门文章

  1. 航天智慧物流!智能汽车竞赛—航天赛道开始报名啦!
  2. 海军工程大学学生电子课程-DIY Final预验收
  3. 42HS48步进电机实验
  4. 使用Postman测试导入和导出excel
  5. echarts中graphic_使用Pyecharts进行奥运会可视化分析!
  6. vue异步数据 报错_vue中异步请求数据,异步请求还没完成,文件就执行了就会报错,怎么解决?...
  7. kafka数据 落盘_Kafka架构原理?也就这么回事!
  8. 12.5.2 升12.5.3的补丁 linux下载,游戏1.17/2.12/3.8/4.5/5.2更新内容[附离线补丁下载地址]...
  9. 域服务器 ssl证书,服务器添加ssl证书及域名绑定
  10. matlab 画一个矩形