zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    RDMA技术详解(二):RDMA Send Receive操作
    RDMA技术详解(一):RDMA概述
    Fedora中制作UEFI/BIOS启动的U盘安装盘
    Fedora中制作BIOS启动的U盘安装盘
    chkdsk /f
    单片机原理及应用---实验计划
    LeetCode 645. Set Mismatch(错误的集合)
    LeetCode 401. Binary Watch(二进制手表)
    LeetCode 852. Peak Index in a Mountain Array(山脉数组的峰顶索引)
    LeetCode 518. Coin Change 2(零钱兑换 II)
  • 原文地址:https://www.cnblogs.com/cy163/p/202881.html
Copyright © 2011-2022 走看看