[Update]判断简体中文的方法

最近一直是负责项目的版署版本更新,从分支拉出来,和主干相去甚远了。

最近的遇到问题和方法总结在此。

版署要求不能有繁体字。

Update---内容在底部

之前在主干做聊天的时候,为了做中文字长度判断,是中文长度为2,字母数字长度为1,做了使用正则表达。

在之前博客中提到正则表达式的使用。 http://blog.csdn.net/u011611902/article/details/49868447

[\u4E00-\u9FA5]用来判断中文字,但是这里面包括了繁体字。


几个主要非英文语系字符范围

2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。

3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。

4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。

A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。

AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。

F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。

FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。

比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$ 

需要注意的是论坛里说的^[\u4E00-\u9FA5]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面, 我用测试器测试了下'中華人民共和國', 也通过了, 当然, ^[\u4E00-\u9FFF]+$也是一样的结果

unicode中简体中文编码,参考链接 http://thoughtfly.iteye.com/blog/977478

这里详细介绍了GB 2312,也就是说我们可以用GB 2312来判断是否是简体中文
首先说明一点:  gb2312-1980的前128个跟ASCII是一致的,而且unicode的前128个跟ASCII也是一致的。基于gb2312-1980只包含简体中文的特性,可以用来判断简体与繁体。  
 gb2312的编码分布查,高字节:0xB0-0xF7,低字节:0xA1-0xFE -->72*94=6768 Chinese Simplified chars.  
 C#判断实现:
 
public static Encoding gb = Encoding.GetEncoding("gb2312");   
 public static boolIsChineseChar(char ch)
 {  
	string str = ch.ToString(); 
	byte[] gb2312Bytes = gb.GetBytes(str);
       // only 1 or 2  
	if(gb2312Bytes.Length == 2)  // double bytes char.  
	   {   
		if(gb2312Bytes[0] >= 0xB0   && gb2312Bytes[0] <= 0xF7  
		&& gb2312Bytes[1] >= 0xA1  && gb2312Bytes[1] <= 0xFE) 
		{  
			return true;    
		 }   
		 else 
		{ 
			return false;
		 } 
	 } 
	 else return false; 
}


-------------------------------------------------------------------------------------------
GB 2312在PC端上没有问题,但是在手机上出现问题,是因为手机上没有GB2312字体库,只支持UTF-8
下载上面提到GB2312 对应的UTF-8的字体编码,检测字体编码,就能判断,使用下来,是没有问题的
脚本我明天会把链接放上来
https://github.com/zhutaorun/SomeTips/tree/master/Assets/Scripts/Tools
——————————————————————————————
https://github.com/zhutaorun/SomeTips/blob/master/Assets/Scripts/Tools/SimplifiedChinese.cs 简体中文的字库,

stringTool执行方法
using System;
using UnityEngine;
using System.Collections;

public class StringTools
{
    public static bool CalaculateChineseWord(string str,SimplifiedChinese charset)
    {
        for (int i = 0; i < str.Length; i++)
        {
            if (!isCh_sm(str[i], charset))
            {
                return false;
            }
        }
        return true;
    }

    public static bool isCh_sm(char ch, SimplifiedChinese charset)
    {
        uint c = (uint) ch;
        if (Array.IndexOf(charset.UnicodeSc, c) != -1)
            return true;
        return false;
    }
}

你可能感兴趣的:(字符处理,游戏工具,unity3d,正则表达式,c#)