好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#汉字转换拼音技术详解(高性能)

C#汉字转换拼音技术详解(高性能)

通过网上汉字转换成拼音的代码,经过本人优化,性能将更加优异。

下面将源代码贴出。

[csharp]   view plain copy

public   static   class  ChineseToPinYin           {                private   static   readonly  Dictionary< int ,  string > CodeCollections =  new  Dictionary< int ,  string > {    { -20319,  "a"  }, { -20317,  "ai"  }, { -20304,  "an"  }, { -20295,  "ang"  }, { -20292,  "ao"  }, { -20283,  "ba"  }, { -20265,  "bai"  },    { -20257,  "ban"  }, { -20242,  "bang"  }, { -20230,  "bao"  }, { -20051,  "bei"  }, { -20036,  "ben"  }, { -20032,  "beng"  }, { -20026,  "bi"  }   , { -20002,  "bian"  }, { -19990,  "biao"  }, { -19986,  "bie"  }, { -19982,  "bin"  }, { -19976,  "bing"  }, { -19805,  "bo"  },    { -19784,  "bu"  }, { -19775,  "ca"  }, { -19774,  "cai"  }, { -19763,  "can"  }, { -19756,  "cang"  }, { -19751,  "cao"  }, { -19746,  "ce"  },    { -19741,  "ceng"  }, { -19739,  "cha"  }, { -19728,  "chai"  }, { -19725,  "chan"  }, { -19715,  "chang"  }, { -19540,  "chao"  },    { -19531,  "che"  }, { -19525,  "chen"  }, { -19515,  "cheng"  }, { -19500,  "chi"  }, { -19484,  "chong"  }, { -19479,  "chou"  },    { -19467,  "chu"  }, { -19289,  "chuai"  }, { -19288,  "chuan"  }, { -19281,  "chuang"  }, { -19275,  "chui"  }, { -19270,  "chun"  },    { -19263,  "chuo"  }, { -19261,  "ci"  }, { -19249,  "cong"  }, { -19243,  "cou"  }, { -19242,  "cu"  }, { -19238,  "cuan"  },    { -19235,  "cui"  }, { -19227,  "cun"  }, { -19224,  "cuo"  }, { -19218,  "da"  }, { -19212,  "dai"  }, { -19038,  "dan"  }, { -19023,  "dang"  },    { -19018,  "dao"  }, { -19006,  "de"  }, { -19003,  "deng"  }, { -18996,  "di"  }, { -18977,  "dian"  }, { -18961,  "diao"  }, { -18952,  "die"  }   , { -18783,  "ding"  }, { -18774,  "diu"  }, { -18773,  "dong"  }, { -18763,  "dou"  }, { -18756,  "du"  }, { -18741,  "duan"  },    { -18735,  "dui"  }, { -18731,  "dun"  }, { -18722,  "duo"  }, { -18710,  "e"  }, { -18697,  "en"  }, { -18696,  "er"  }, { -18526,  "fa"  },    { -18518,  "fan"  }, { -18501,  "fang"  }, { -18490,  "fei"  }, { -18478,  "fen"  }, { -18463,  "feng"  }, { -18448,  "fo"  }, { -18447,  "fou"  }   , { -18446,  "fu"  }, { -18239,  "ga"  }, { -18237,  "gai"  }, { -18231,  "gan"  }, { -18220,  "gang"  }, { -18211,  "gao"  }, { -18201,  "ge"  },    { -18184,  "gei"  }, { -18183,  "gen"  }, { -18181,  "geng"  }, { -18012,  "gong"  }, { -17997,  "gou"  }, { -17988,  "gu"  }, { -17970,  "gua"  }   , { -17964,  "guai"  }, { -17961,  "guan"  }, { -17950,  "guang"  }, { -17947,  "gui"  }, { -17931,  "gun"  }, { -17928,  "guo"  },   { -17922,  "ha"  }, { -17759,  "hai"  }, { -17752,  "han"  }, { -17733,  "hang"  }, { -17730,  "hao"  }, { -17721,  "he"  }, { -17703,  "hei"  },    { -17701,  "hen"  }, { -17697,  "heng"  }, { -17692,  "hong"  }, { -17683,  "hou"  }, { -17676,  "hu"  }, { -17496,  "hua"  },    { -17487,  "huai"  }, { -17482,  "huan"  }, { -17468,  "huang"  }, { -17454,  "hui"  }, { -17433,  "hun"  }, { -17427,  "huo"  },    { -17417,  "ji"  }, { -17202,  "jia"  }, { -17185,  "jian"  }, { -16983,  "jiang"  }, { -16970,  "jiao"  }, { -16942,  "jie"  },    { -16915,  "jin"  }, { -16733,  "jing"  }, { -16708,  "jiong"  }, { -16706,  "jiu"  }, { -16689,  "ju"  }, { -16664,  "juan"  },    { -16657,  "jue"  }, { -16647,  "jun"  }, { -16474,  "ka"  }, { -16470,  "kai"  }, { -16465,  "kan"  }, { -16459,  "kang"  }, { -16452,  "kao"  },    { -16448,  "ke"  }, { -16433,  "ken"  }, { -16429,  "keng"  }, { -16427,  "kong"  }, { -16423,  "kou"  }, { -16419,  "ku"  }, { -16412,  "kua"  }   , { -16407,  "kuai"  }, { -16403,  "kuan"  }, { -16401,  "kuang"  }, { -16393,  "kui"  }, { -16220,  "kun"  }, { -16216,  "kuo"  },    { -16212,  "la"  }, { -16205,  "lai"  }, { -16202,  "lan"  }, { -16187,  "lang"  }, { -16180,  "lao"  }, { -16171,  "le"  }, { -16169,  "lei"  },    { -16158,  "leng"  }, { -16155,  "li"  }, { -15959,  "lia"  }, { -15958,  "lian"  }, { -15944,  "liang"  }, { -15933,  "liao"  },    { -15920,  "lie"  }, { -15915,  "lin"  }, { -15903,  "ling"  }, { -15889,  "liu"  }, { -15878,  "long"  }, { -15707,  "lou"  }, { -15701,  "lu"  },    { -15681,  "lv"  }, { -15667,  "luan"  }, { -15661,  "lue"  }, { -15659,  "lun"  }, { -15652,  "luo"  }, { -15640,  "ma"  }, { -15631,  "mai"  },    { -15625,  "man"  }, { -15454,  "mang"  }, { -15448,  "mao"  }, { -15436,  "me"  }, { -15435,  "mei"  }, { -15419,  "men"  },    { -15416,  "meng"  }, { -15408,  "mi"  }, { -15394,  "mian"  }, { -15385,  "miao"  }, { -15377,  "mie"  }, { -15375,  "min"  },    { -15369,  "ming"  }, { -15363,  "miu"  }, { -15362,  "mo"  }, { -15183,  "mou"  }, { -15180,  "mu"  }, { -15165,  "na"  }, { -15158,  "nai"  },    { -15153,  "nan"  }, { -15150,  "nang"  }, { -15149,  "nao"  }, { -15144,  "ne"  }, { -15143,  "nei"  }, { -15141,  "nen"  }, { -15140,  "neng"  }   , { -15139,  "ni"  }, { -15128,  "nian"  }, { -15121,  "niang"  }, { -15119,  "niao"  }, { -15117,  "nie"  }, { -15110,  "nin"  },    { -15109,  "ning"  }, { -14941,  "niu"  }, { -14937,  "nong"  }, { -14933,  "nu"  }, { -14930,  "nv"  }, { -14929,  "nuan"  }, { -14928,  "nue"  }   , { -14926,  "nuo"  }, { -14922,  "o"  }, { -14921,  "ou"  }, { -14914,  "pa"  }, { -14908,  "pai"  }, { -14902,  "pan"  }, { -14894,  "pang"  },    { -14889,  "pao"  }, { -14882,  "pei"  }, { -14873,  "pen"  }, { -14871,  "peng"  }, { -14857,  "pi"  }, { -14678,  "pian"  },    { -14674,  "piao"  }, { -14670,  "pie"  }, { -14668,  "pin"  }, { -14663,  "ping"  }, { -14654,  "po"  }, { -14645,  "pu"  }, { -14630,  "qi"  },    { -14594,  "qia"  }, { -14429,  "qian"  }, { -14407,  "qiang"  }, { -14399,  "qiao"  }, { -14384,  "qie"  }, { -14379,  "qin"  },    { -14368,  "qing"  }, { -14355,  "qiong"  }, { -14353,  "qiu"  }, { -14345,  "qu"  }, { -14170,  "quan"  }, { -14159,  "que"  },    { -14151,  "qun"  }, { -14149,  "ran"  }, { -14145,  "rang"  }, { -14140,  "rao"  }, { -14137,  "re"  }, { -14135,  "ren"  }, { -14125,  "reng"  }   , { -14123,  "ri"  }, { -14122,  "rong"  }, { -14112,  "rou"  }, { -14109,  "ru"  }, { -14099,  "ruan"  }, { -14097,  "rui"  }, { -14094,  "run"  }   , { -14092,  "ruo"  }, { -14090,  "sa"  }, { -14087,  "sai"  }, { -14083,  "san"  }, { -13917,  "sang"  }, { -13914,  "sao"  }, { -13910,  "se"  }   , { -13907,  "sen"  }, { -13906,  "seng"  }, { -13905,  "sha"  }, { -13896,  "shai"  }, { -13894,  "shan"  }, { -13878,  "shang"  },    { -13870,  "shao"  }, { -13859,  "she"  }, { -13847,  "shen"  }, { -13831,  "sheng"  }, { -13658,  "shi"  }, { -13611,  "shou"  },    { -13601,  "shu"  }, { -13406,  "shua"  }, { -13404,  "shuai"  }, { -13400,  "shuan"  }, { -13398,  "shuang"  }, { -13395,  "shui"  },    { -13391,  "shun"  }, { -13387,  "shuo"  }, { -13383,  "si"  }, { -13367,  "song"  }, { -13359,  "sou"  }, { -13356,  "su"  },    { -13343,  "suan"  }, { -13340,  "sui"  }, { -13329,  "sun"  }, { -13326,  "suo"  }, { -13318,  "ta"  }, { -13147,  "tai"  }, { -13138,  "tan"  },    { -13120,  "tang"  }, { -13107,  "tao"  }, { -13096,  "te"  }, { -13095,  "teng"  }, { -13091,  "ti"  }, { -13076,  "tian"  },    { -13068,  "tiao"  }, { -13063,  "tie"  }, { -13060,  "ting"  }, { -12888,  "tong"  }, { -12875,  "tou"  }, { -12871,  "tu"  },    { -12860,  "tuan"  }, { -12858,  "tui"  }, { -12852,  "tun"  }, { -12849,  "tuo"  }, { -12838,  "wa"  }, { -12831,  "wai"  }, { -12829,  "wan"  }   , { -12812,  "wang"  }, { -12802,  "wei"  }, { -12607,  "wen"  }, { -12597,  "weng"  }, { -12594,  "wo"  }, { -12585,  "wu"  }, { -12556,  "xi"  }   , { -12359,  "xia"  }, { -12346,  "xian"  }, { -12320,  "xiang"  }, { -12300,  "xiao"  }, { -12120,  "xie"  }, { -12099,  "xin"  },    { -12089,  "xing"  }, { -12074,  "xiong"  }, { -12067,  "xiu"  }, { -12058,  "xu"  }, { -12039,  "xuan"  }, { -11867,  "xue"  },    { -11861,  "xun"  }, { -11847,  "ya"  }, { -11831,  "yan"  }, { -11798,  "yang"  }, { -11781,  "yao"  }, { -11604,  "ye"  }, { -11589,  "yi"  },    { -11536,  "yin"  }, { -11358,  "ying"  }, { -11340,  "yo"  }, { -11339,  "yong"  }, { -11324,  "you"  }, { -11303,  "yu"  },    { -11097,  "yuan"  }, { -11077,  "yue"  }, { -11067,  "yun"  }, { -11055,  "za"  }, { -11052,  "zai"  }, { -11045,  "zan"  },    { -11041,  "zang"  }, { -11038,  "zao"  }, { -11024,  "ze"  }, { -11020,  "zei"  }, { -11019,  "zen"  }, { -11018,  "zeng"  },    { -11014,  "zha"  }, { -10838,  "zhai"  }, { -10832,  "zhan"  }, { -10815,  "zhang"  }, { -10800,  "zhao"  }, { -10790,  "zhe"  },    { -10780,  "zhen"  }, { -10764,  "zheng"  }, { -10587,  "zhi"  }, { -10544,  "zhong"  }, { -10533,  "zhou"  }, { -10519,  "zhu"  },    { -10331,  "zhua"  }, { -10329,  "zhuai"  }, { -10328,  "zhuan"  }, { -10322,  "zhuang"  }, { -10315,  "zhui"  }, { -10309,  "zhun"  },    { -10307,  "zhuo"  }, { -10296,  "zi"  }, { -10281,  "zong"  }, { -10274,  "zou"  }, { -10270,  "zu"  }, { -10262,  "zuan"  }, { -10260,  "zui"  }   , { -10256,  "zun"  }, { -10254,  "zuo"  } };                ///   <summary>                  ///   汉字转拼音                  ///   </summary>                  ///   <param   name="txt"> 需要转换的汉字 </param>                  ///   <returns> 返回汉字对应的拼音 </returns>                  public   static   string  ToPinYin( string  txt)               {                   txt = txt.Trim();                    byte [] arr =  new   byte [2];    //每个汉字为2字节                     StringBuilder result =  new  StringBuilder(); //使用StringBuilder优化字符串连接                     int  charCode = 0;                    int  arr1 = 0;                    int  arr2 = 0;                    char [] arrChar = txt.ToCharArray();                    for  ( int  j = 0; j < arrChar.Length; j++)    //遍历输入的字符                     {                       arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString()); //根据系统默认编码得到字节码                          if  (arr.Length == 1) //如果只有1字节说明该字符不是汉字,结束本次循环                         {                           result.Append(arrChar[j].ToString());                            continue ;                          }                       arr1 = ( short )(arr[0]);    //取字节1                         arr2 = ( short )(arr[1]);    //取字节2                         charCode = arr1 * 256 + arr2 - 65536; //计算汉字的编码                              if  (charCode > -10254 || charCode < -20319)   //如果不在汉字编码范围内则不改变                         {                           result.Append(arrChar[j]);                       }                        else                        {                            //根据汉字编码范围查找对应的拼音并保存到结果中                              //由于charCode的键不一定存在,所以要找比他更小的键上一个键                             if  (!CodeCollections.ContainsKey(charCode))                           {                                for  ( int  i = charCode; i <= 0; --i)                               {                                    if  (CodeCollections.ContainsKey(i))                                   {                                       result.Append( " "  + CodeCollections[i] +  " " );                                        break ;                                   }                               }                           }                            else                            {                               result.Append( " "  + CodeCollections[charCode] +  " " );                           }                       }                   }                    return  result.ToString();               }           }  



更多WEB開發技術請加群:Asp.Net/Wp8高級開發群 號碼:261882616

 

博主以及同事和你共同探討感興趣的話題 。

 

 

标签:  Asp.net

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C#汉字转换拼音技术详解(高性能)的详细内容...

  阅读:41次