中文字符转化为拼音

using System;
using System.Text;

namespace Caceolod
{
    
/// <summary>
    
/// Chs2Spell 的摘要说明
    
/// 1将一串汉字转化为拼音
    
/// 2单个转化为拼音
    
/// 3得到单个汉字拼音的首字母
    
/// </summary>
    public class PinYing
    {
        
public PinYing()
        {
           
        }

        
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"
            };

       

        
/// <summary>
        
/// 将一串中文转化为拼音
        
/// 如果给定的字符为非中文汉字将不执行转化,直接返回原字符;
        
/// </summary>
        
/// <param >指定汉字</param>
        
/// <returns>拼音码</returns>
        public static string StringToPinYing(string chsstr)
        {
            
string strRet = string.Empty;
            chsstr 
= SbcCaseToDbcCase(chsstr);
            
char[] ArrChar = chsstr.ToCharArray();

            
foreach(char c in ArrChar)
            {
                strRet 
+= SingleWordToPinYing(c.ToString());
            }

            
return strRet;
        }

        
/// <summary>
        
/// 将一串中文转化为拼音首字母缩写
        
/// </summary>
        
/// <param >指定汉字</param>
        
/// <returns>拼音首字母</returns>
        public static string StringToHeadPinYing(string chsstr)
        {
            
string strRet = string.Empty;

            
char[] ArrChar = chsstr.ToCharArray();

            
foreach(char c in ArrChar)
            {
                strRet 
+= SingleWordToHeadPinYing(c.ToString());
            }

            
return strRet;
        }

        
/// <summary>
        
/// 单个汉字转化为拼音
        
/// </summary>
        
/// <param >单个汉字</param>
        
/// <returns>拼音</returns>
        public static string SingleWordToPinYing(string SingleChs)
        {
            SingleChs 
= SbcCaseToDbcCase(SingleChs);
            
byte[] array;
            
int iAsc;
            
string strRtn = string.Empty;

            array 
= Encoding.Default.GetBytes(SingleChs);

            
if(array.Length < 2
            {
                
//非汉字返回
                return SingleChs;
            }

            
try
            {
                iAsc 
= (short)(array[0]) * 256 + (short)(array[1]) - 65536;
            }
            
catch
            {
                iAsc 
= 1;
            }

            
if(iAsc > 0 && iAsc < 160)
                
return SingleChs;

            
for(int i = (pyvalue.Length - 1); i >= 0; i--)
            {
                
if(pyvalue[i] <= iAsc)
                {
                    strRtn 
= pystr[i];
                    
break;
                }
            }

            
//将首字母转为大写
            if(strRtn.Length > 1)
            {
                strRtn 
= strRtn.Substring(01).ToUpper() + strRtn.Substring(1);
            }

            
return strRtn;
        }

        
/// <summary>
        
/// 得到单个汉字拼音的首字母
        
/// </summary>
        
/// <returns></returns>
        public static string SingleWordToHeadPinYing(string SingleChs)
        {
            
return SingleWordToPinYing(SingleChs).Substring(01);
        }

        
/// <summary>
        
/// 全角(SBC)转半角(DBC)
        
/// </summary>
        
/// <param name="source"></param>
        
/// <returns></returns>
        public static string SbcCaseToDbcCase(string source)   
        {   
            System.Text.StringBuilder result 
= new System.Text.StringBuilder(source.Length,source.Length);   
            
for (int i=0;i<source.Length;i++)   
            {
                
if(source[i] >= 65281 && source[i] <= 65373)
                {
                    result.Append((
char)(source[i] - 65248));
                }
                
else
                {
                    
char _chr = source[i];
                    
switch(_chr) 
                    {
                        
case '':
                            result.Append(
'~');
                            
break;
                        
case '':
                            result.Append(
' ');
                            
break;
                        
case '':
                            result.Append(
'>');
                            
break;
                        
case '':
                            result.Append(
'<');
                            
break;
                        
case ' ':
                            result.Append(
' ');
                            
break;
                        
default:
                            result.Append(_chr);
                            
break;
                    }
                }   
            }   
            
return  result.ToString();   
         }



        
/// <summary>
        
/// 半角(DBC)转全角(SBC)
        
/// </summary>
        
/// <param name="source"></param>
        
/// <returns></returns>
        public static string  DbcCaseToSbcCase(string source)   
        {   
            System.Text.StringBuilder result 
= new System.Text.StringBuilder(source.Length,source.Length);   
            
for (int i=0;i<source.Length;i++)   
            {
                
if(source[i] >= 33 && source[i] <= 125)
                {
                    result.Append((
char)(source[i] + 65248));
                }
                
else
                {
                    
char _chr = source[i];
                    
switch(_chr) 
                    {
                        
case ' ':
                            result.Append(
' ');
                            
break;
                        
case '~':
                            result.Append(
'');                            
                            
break;                      
                        
default:
                            result.Append(_chr);
                            
break;
                    }
                }   
            }   
            
return  result.ToString();   
        }        


     }        
}

使用实例:
string CStr="我是中文字符";
string EFStr=PinYing.StringToPinYing(CStr);   ///得到woshizhongwenzifu
string ESstr=PinYing.StringToHeadPinYing(CStr);   ///得到  wszwzf
posted @ 2007-08-24 13:22  海底的鱼  阅读(618)  评论(0)    收藏  举报