谁能提供一下汉字转拼音的代码或组件

解决方案 »

  1.   

    /// <summary>
            /// 根据汉字拼音排序得到首字母
            /// </summary>
            /// <param name="str">Unicode格式的一个汉字</param>
            /// <returns>汉字的声母</returns>
            public static string GetGbkPY(string str)
            {
                if (str.CompareTo("吖") < 0) return str;
                if (str.CompareTo("八") < 0) return "A";
                if (str.CompareTo("嚓") < 0) return "B";
                if (str.CompareTo("咑") < 0) return "C";
                if (str.CompareTo("妸") < 0) return "D";
                if (str.CompareTo("发") < 0) return "E";
                if (str.CompareTo("旮") < 0) return "F";
                if (str.CompareTo("铪") < 0) return "G";
                if (str.CompareTo("讥") < 0) return "H";
                if (str.CompareTo("咔") < 0) return "J";
                if (str.CompareTo("垃") < 0) return "K";
                if (str.CompareTo("嘸") < 0) return "L";
                if (str.CompareTo("拏") < 0) return "M";
                if (str.CompareTo("噢") < 0) return "N";
                if (str.CompareTo("妑") < 0) return "O";
                if (str.CompareTo("七") < 0) return "P";
                if (str.CompareTo("亽") < 0) return "Q";
                if (str.CompareTo("仨") < 0) return "R";
                if (str.CompareTo("他") < 0) return "S";
                if (str.CompareTo("哇") < 0) return "T";
                if (str.CompareTo("夕") < 0) return "W";
                if (str.CompareTo("丫") < 0) return "X";
                if (str.CompareTo("帀") < 0) return "Y";
                if (str.CompareTo("咗") < 0) return "Z";
                return str;
            }
      

  2.   

    以上方法快是快,遇到生辟字或多音字,就是一堆玩具代码
    用x:\Program Files\Windows NT\Accessories\Imegen.exe去逆转换WinPY.MB文件,然后读到程序的一个字典中,才是商业方法
      

  3.   

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

  4.   

    //汉字转拼音缩写
            public string GetPYString(string str)
            {
                string tempStr = "";
                foreach(char c in str)
                {
                    if((int)c >= 33 && (int)c <=126)
                    {//字母和符号原样保留
                        tempStr += c.ToString();
                    }
                    else
                    {//累加拼音声母
                        tempStr += GetPYChar(c.ToString());
                    }
                }
                return tempStr;
            }     
            //取单个字符的拼音声母
         
            public string GetPYChar(string c)
            {
                byte[] array = new byte[2];
                array = System.Text.Encoding.Default.GetBytes(c);
                int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));            if ( i < 0xB0A1) return "*";
                if ( i < 0xB0C5) return "a";
                if ( i < 0xB2C1) return "b";
                if ( i < 0xB4EE) return "c";
                if ( i < 0xB6EA) return "d";
                if ( i < 0xB7A2) return "e";
                if ( i < 0xB8C1) return "f";
                if ( i < 0xB9FE) return "g";
                if ( i < 0xBBF7) return "h";
                if ( i < 0xBFA6) return "g";
                if ( i < 0xC0AC) return "k";
                if ( i < 0xC2E8) return "l";
                if ( i < 0xC4C3) return "m";
                if ( i < 0xC5B6) return "n";
                if ( i < 0xC5BE) return "o";
                if ( i < 0xC6DA) return "p";
                if ( i < 0xC8BB) return "q";
                if ( i < 0xC8F6) return "r";
                if ( i < 0xCBFA) return "s";
                if ( i < 0xCDDA) return "t";
                if ( i < 0xCEF4) return "w";
                if ( i < 0xD1B9) return "x";
                if ( i < 0xD4D1) return "y";
                if ( i < 0xD7FA) return "z";            return "*";
            }
      

  5.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    string strtemp="";
    string hz=Txt1.Text.Trim();
    int strlen=hz.Length;
    for (int i=0;i<=strlen-1;i++)
    {
    strtemp+=this.ChineseCharToPinyin(hz.Substring(i,1));
    }
    this.Txt2.Text=strtemp.ToString();
    }
    /// <summary>
    /// 获取中文字符的字母前缀
    /// </summary>
    /// <param name="hz">汉字</param>
    /// <returns>拼音首字</returns>
    public  string ChineseCharToPinyin(string hz)  //获得汉字的区位码
    {
    byte[] sarr = System.Text.Encoding.Default.GetBytes(hz);
    int len = sarr.Length;
    if (len>1)
    {
    byte[] array = new byte[2];
    array = System.Text.Encoding.Default.GetBytes(hz); int i1 = (short)(array[0] - '\0');
    int i2 = (short)(array[1] - '\0'); //unicode解码方式下的汉字码
    //            array = System.Text.Encoding.Unicode.GetBytes(hz); int tmp=i1*256+i2;
    string getpychar="*";//找不到拼音码的用*补位 if(tmp>=45217&&tmp<=45252){getpychar= "A";}
    else if(tmp>=45253&&tmp<=45760){getpychar= "B";}
    else if(tmp>=45761&&tmp<=46317){getpychar= "C";}
    else if(tmp>=46318&&tmp<=46825){getpychar= "D";}
    else if(tmp>=46826&&tmp<=47009){getpychar= "E";}
    else if(tmp>=47010&&tmp<=47296){getpychar= "F";}
    else if(tmp>=47297&&tmp<=47613){getpychar= "G";}
    else if(tmp>=47614&&tmp<=48118){getpychar= "H";}
    else if(tmp>=48119&&tmp<=49061){getpychar= "J";}
    else if(tmp>=49062&&tmp<=49323){getpychar= "K";}
    else if(tmp>=49324&&tmp<=49895){getpychar= "L";}
    else if(tmp>=49896&&tmp<=50370){getpychar= "M";}
    else if(tmp>=50371&&tmp<=50613){getpychar= "N";}
    else if(tmp>=50614&&tmp<=50621){getpychar= "O";}
    else if(tmp>=50622&&tmp<=50905){getpychar= "P";}
    else if(tmp>=50906&&tmp<=51386){getpychar= "Q";}
    else if(tmp>=51387&&tmp<=51445){getpychar= "R";}
    else if(tmp>=51446&&tmp<=52217){getpychar= "S";}
    else if(tmp>=52218&&tmp<=52697){getpychar= "T";}
    else if(tmp>=52698&&tmp<=52979){getpychar= "W";}
    else if(tmp>=52980&&tmp<=53640){getpychar= "X";}
    else if(tmp>=53689&&tmp<=54480){getpychar= "Y";}
    else if(tmp>=54481&&tmp<=55289){getpychar= "Z";}
    return getpychar;
    }
    else
    {
    return hz;
    }
    }
      

  6.   

    to:
     zhangzengping(张增平) ( ) 信誉:100    Blog  2006-10-25 23:40:55  得分: 0  
    我用了你的代码,多数字是可以的,但至少我发现了,‘邰’拼音应为'tai',你代码里转换后为'zuo',不知 这是为什么?
      

  7.   

    多谢zhangzengping(张增平) ,收藏了。
    另外,我对你的convert方法做了些修改,因为如果输入数字,英文字母,该方法会有异常。
    public static string convert(string chrstr) 

    byte[] array = new byte[2]; 
    string returnstr=""; 
    int chrasc=0; 
    int i1 = 0; 
    int i2 =0; 
    char[] nowchar=chrstr.ToCharArray(); 
    for (int j=0;j<nowchar.Length ;j++) 
    {
    //增加了对字符长度判断的处理,避免了因为字符串中存在英文、数字而引起的异常
    byte[] btchk = System.Text.Encoding.Default.GetBytes(nowchar[j].ToString ());
    if(btchk.Length == 1)
    {
    returnstr+=nowchar[j].ToString();
    continue;
    }
    array = btchk;
    i1 = (short)(array[0] ); 
    i2 = (short)(array[1] ); 
    chrasc=i1*256+i2-65536; 
    if (chrasc>0 && chrasc<160) 

    returnstr+=nowchar[j]; 

    else 

    for (int i=(pyvalue.Length -1);i>=0;i--) 

    if (pyvalue[i]<=chrasc) 

    returnstr+=pystr[i]; 
    break; 




    return returnstr; 
    }
      

  8.   

    的确如fttcccc(海角天涯001) 说的,有一些字拼音不对,或者是找不到。有一些拼音能找到,拼音的缩写找不到。
      

  9.   

    镕 出来的拼音是 zuo !!!
      

  10.   

    就是没找到 出来的都是zuo
      

  11.   

    to:zhangzengping(张增平) 
           public string GetPYChar(string c)
            {
                byte[] array = new byte[2];
                array = System.Text.Encoding.Default.GetBytes(c);
                int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));            if ( i < 0xB0A1) return "*";
                if ( i < 0xB0C5) return "a";
                if ( i < 0xB2C1) return "b";
                if ( i < 0xB4EE) return "c";
                if ( i < 0xB6EA) return "d";
                if ( i < 0xB7A2) return "e";
                if ( i < 0xB8C1) return "f";
                if ( i < 0xB9FE) return "g";
                if ( i < 0xBBF7) return "h";
                if ( i < 0xBFA6) return "g";
    ===========================================应该是j吧
                if ( i < 0xC0AC) return "k";
                if ( i < 0xC2E8) return "l";
                if ( i < 0xC4C3) return "m";
                if ( i < 0xC5B6) return "n";
                if ( i < 0xC5BE) return "o";
                if ( i < 0xC6DA) return "p";
                if ( i < 0xC8BB) return "q";
                if ( i < 0xC8F6) return "r";
                if ( i < 0xCBFA) return "s";
                if ( i < 0xCDDA) return "t";
                if ( i < 0xCEF4) return "w";
                if ( i < 0xD1B9) return "x";
                if ( i < 0xD4D1) return "y";
                if ( i < 0xD7FA) return "z";            return "*";
            }
      

  12.   

    http://www.dullwolf.cn/去下载汉字转换拼音程序,代码公开的,可以转换成任何程序语言,英文操作系统下好使.qù  xià  zǎi  hàn  zì  zhuǎn  huàn  pīn  yīn  chéng  xù , dài  mǎ  gōng  kāi  de  , kě  yǐ  zhuǎn  huàn  chéng  rèn  hé  chéng  xù  yǔ  yán , yīng  wén  cāo  zuò  xì  tǒng  xià  hǎo  shǐ .支持大部分多音字
     zhī  chí  dà  bù  fēn  duō  yīn  zì 很长  长远    长久
    hěn  cháng    cháng  yuǎn      cháng  jiǔ 
    生长  成长 
    shēng zhǎng    chéng  zhǎngzhù  fú  suǒ  yǒu  xiōng di  jiě  mèi  ,  xīn  de  yī  nián  ,  yǒu  gèng  duō  shōu  huò 祝福所有兄弟姐妹,新的一年,有更多收获
    cún  zài  wèn  tí  : -------- hào  hē  jiǔ  。
    存在问题:--------好喝酒。
    fēn  xī  yuán  yīn  : -------- jiǔ  hǎo  hē  。
    分析原因:--------酒好喝。
    zǒng  jié  jīng  yàn  : -------- hē  jiǔ  hǎo  。
    总结经验:--------喝酒好。
    zhěng  gǎi  cuò  shī  : -------- jiǔ  hē  hǎo  。
    整改措施:--------酒喝好。
    nǔ  lì  fāng  xiàng  : -------- hē  hǎo  jiǔ  。
    努力方向:--------喝好酒。