利用字符编码集对中文长度的不同来判断字符串中有没有中文

是这样的,在日常开发中遇到一个问题:判断一个字符串中是否含有中文。本来是很简单的一个需求,用正则就搞定了。然而这是一个很老旧的一个系统,有自己的一套开发语言。偏偏不支持正则,这就难住我了。

当时想到一个笨办法:把三千个常用汉字写在一个配置文件中,把要判断的字符串分割为一个个字符,一个个的去配置文件中找,看能不能找到,能找到就是含有中文,没找到就是没有。。。。幸亏我没用这个方法,实在有点笨,有点丢人。

后来又看到一篇文章,是讲中文在不同编码下字符集长度不同的问题。这一下就给我启发了,我把字符串转为不同的编码,比较两者的长度不就判断有没有中文了吗。

当时用的两个编码, 一个是ANSI,一个是UTF-8.

这儿解释一下ANSI,这是对ASCII编码的扩展。这是一个编码字符集,里面就包括了中国地区用的GB2312,韩国用的Euc-kr。操作系统会根据地区的不同,选择不同的ANSI编码,中国地区就选择GB2312。

在ANSI也就是GB2312编码中,中文、英文到度是两个字节。而UTF-8中,英文的长度是两个字节,中文的长度是三个字节。这中间的差值就是判断是否有中文的字符的依据了。我们还能根据这个差值判断有多少个中文字符。

考虑到输入的内容基本只会有中文、英文、符号等,不会出现韩文、日文这些文字,可以认为这个问题解决!

posted @ 2018-12-01 15:27  contixue  阅读(340)  评论(0编辑  收藏  举报