Chinese Character and Unicode

匹配Unicode字符的正则表达式

http://www.cnblogs.com/dudu/articles/153010.html这里是几个主要非英文语系字符范围(google上找到的):

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

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

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

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

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

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

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

比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$
理论上没错, 可是我到msn.co.ko随便复制了个韩文下来, 发现根本不对, 诡异
再到msn.co.jp复制了个'お', 也不得行..

然后把范围扩大到^[\u2E80-\u9FFF]+$, 这样倒是都通过了, 这个应该就是匹配中日韩文字的正则表达式了, 包括我們臺灣省還在盲目使用的繁體中文

而关于中文的正则表达式, 应该是^[\u4E00-\u9FFF]+$, 和论坛里常被人提起的^[\u4E00-\u9FA5]+$很接近

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















//获得汉字的区位码
  byte[] array = new byte[2];
  array = System.Text.Encoding.Default.GetBytes("啊");


int i1 = (short)(array[0] - ''\0'');
  int i2 = (short)(array[1] - ''\0'');


//unicode解码方式下的汉字码
  array = System.Text.Encoding.Unicode.GetBytes("啊");
  i1 = (short)(array[0] - ''\0'');
  i2 = (short)(array[1] - ''\0'');


//unicode反解码为汉字
  string str = "4a55";
  string s1 = str.Substring(0,2);
  string s2 = str.Substring(2,2);


int t1 = Convert.ToInt32(s1,16);
  int t2 = Convert.ToInt32(s2,16);


array[0] = (byte)t1;
  array[1] = (byte)t2;


string s = System.Text.Encoding.Unicode.GetString(array);


//default方式反解码为汉字
  array[0] = (byte)196;
  array[1] = (byte)207;
  s = System.Text.Encoding.Default.GetString(array);


//取字符串长度
  s = "woshi蓝蓝";
  int len = s.Length;//will output as 6
  byte[] sarr = System.Text.Encoding.Default.GetBytes(s);
  len = sarr.Length;//will output as 3+3*2=9


//字符串相加
  System.Text.StringBuilder sb = new System.Text.StringBuilder("");
  sb.Append("i ");
  sb.Append("am ");
  sb.Append("蓝蓝");

/////////////////////////////////////////////////////////////////////

补充:

string --> byte array

byte[] data=Syste.Text.Encoding.ASCII.GetBytes(string);

string --> byte

byte data = Convert.ToByte(string);

byte[]-->string

string string = Encoding.ASCII.GetString( bytes, 0, nBytesSize );

Feedback

# re: [收藏]C#中一些字符串操作的常用用法   

2004-05-27 19:03 by Meyer
怎么看着象juqiang当年的帖子啊

# re: [收藏]C#中一些字符串操作的常用用法   

2004-07-28 11:03 by juqiang
嗬嗬,我看着也像!希望大家继续补充吧!!!

# NET Tips 取字符串的绝对长度[TrackBack]   

2005-01-25 10:25 by 阿力
Ping Back来自:www.donews.net
阿力引用了该文章,地址:http://www.donews.net/lealting/archive/2005/01/25/255675.aspx

# re: [收藏]C#中一些字符串操作的常用用法   

2005-03-13 11:10 by liu
我按照上面获得区位码的方法做,结果报错了

我后来是这么做,不知道对不对
//获得汉字的区位码
  byte[] array = new byte[2];
  array = System.Text.Encoding.Default.GetBytes("啊");
int[] i=new int[2];


i[0] = (short)(array[0] - 160);
  i[1]= (short)(array[1] - 160);

posted on 2005-07-29 15:39  cy163  阅读(848)  评论(1编辑  收藏  举报

导航