C++判断字符串中是否有中文
参考:
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++判断字符串中是否有中文相关推荐
- java判断字符串中是否包含中文 过滤中文
package com.test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class Test {@ ...
- 判断字符串中是否包含中文
判断字符串中是否包含中文 select case when 'y我' like '%[啊-座]%' then '包含中文 ' else '不包含中文 ' end 转载于:https://www.cnb ...
- java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文
java判断字符串中是否包含中文并过滤掉中文,具体内容如下 1.判断字符串中是否包含中文方法封装 /** * 判断字符串中是否包含中文 * @param str * 待校验字符串 * @return ...
- JAVA判断字符串中是否包含中文汉字
汉字的Unicode范围扩展了好多次了,网上的各种判断正则都是之前的,漏了很多 汉字 下面是最新的最全的判断正则 /*** 判断字符串中是否包含中文汉字** @param content* @retu ...
- java 判断 中文字符_java中判断字符串中是否有中文字符
package com.meritit.test; public class TestChart { public static void main(String[] args) throws Exc ...
- php字符是汉字还是字符,php判断字符串中是否包含中文汉字和获得字符串中的汉字...
一,判断全是中文 $str="'324是中国人"; if(!eregi("[^\x80-\xff]","$str")){ echo &quo ...
- pgsql 筛选中文字符正则_PostGreSql 判断字符串中是否有中文的案例
我就废话不多说了,大家还是直接看代码吧~ 实例 imos=# select 'hello' ~ '[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]'; ? ...
- qt 判断字符串中是否含有中文字符_Qt 中文字符串问题
一. Qt5假定的执行字符集是UTF8,不再允许用户擅自改动.这样一来,Qt4中setCodecXXX的各种副作用不再存在,而且中文问题更为简单. QString s1 = "汉语" ...
- java 判断是否包含中文_Java中判断字符串中是否包含中文汉字
一般在用户登录时需要判断用户名是否为中文汉字,可以使用正则表达式,来匹配字符是否包含中文,中文通配符为[u4e00-u9fa5]匹配中文,下面为大家分享一下使用Matcher来解决此问题. 代码如下: ...
最新文章
- STM32F103 与 STM32F407引脚兼容问题
- 使用驱动器f:中的光盘之前需要将其格式化_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...
- 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
- Fastai-数据准备
- spring mvc学习(40):restful的crud实现增加方式
- pythonwebview自动化测试_GitHub - githubwzg/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...
- 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载(内附加2.7.5版本微擎)支持多种CPS收益和流量主收益
- 反编译工具Depends---dll和exe反编译工具
- 计算机组策略无法编辑,win7系统无法打开本地组策略编辑器的解决方法
- 欢迎来到Wagtail的文档
- linux修改键盘布局
- centos 6.5安装步骤
- 2. 输出2~100之间的素数
- FT1248程序(FT232H,FT220X)
- 月亮代表我的心计算机谱子,月亮代表我的心
- 使用shp数据批量裁剪栅格数据并统计均值
- 谈我的算法工程师校招经历
- B/S、C/S、 A/S
- 【Spine】眨眼动画
- python HTTPConnectionPool(host:XX)Max retries exceeded with url
热门文章
- 航天智慧物流!智能汽车竞赛—航天赛道开始报名啦!
- 海军工程大学学生电子课程-DIY Final预验收
- 42HS48步进电机实验
- 使用Postman测试导入和导出excel
- echarts中graphic_使用Pyecharts进行奥运会可视化分析!
- vue异步数据 报错_vue中异步请求数据,异步请求还没完成,文件就执行了就会报错,怎么解决?...
- kafka数据 落盘_Kafka架构原理?也就这么回事!
- 12.5.2 升12.5.3的补丁 linux下载,游戏1.17/2.12/3.8/4.5/5.2更新内容[附离线补丁下载地址]...
- 域服务器 ssl证书,服务器添加ssl证书及域名绑定
- matlab 画一个矩形