获取汉字拼音(繁体转简体)

来源:互联网 发布:皇朝娱乐关注软件 编辑:程序博客网 时间:2024/06/02 16:58

using System;

using System.Collections;

using System.Globalization;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic;

namespace pcmax {
    
/// <summary>
    
/// 汉字转拼音工具。
    
/// </summary>
    public sealed class CHS2PinYin {
        
/// <summary>
        
/// 包含字符 ASC 码的整形数组。
        
/// </summary>
        private static int[] pv = 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 };

        
/// <summary>
        
/// 包含汉字拼音的字符串数组。
        
/// </summary>
        private static string[] ps = 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>
        private static string[] bd = new string[] { """""""""""""""""""""""""""""""""""""""""""""""""""" };

        
private static Hashtable _Phrase;

        
/// <summary>
        
/// 设置或获取包含列外词组读音的键/值对的组合。
        
/// </summary>
        public static Hashtable Phrase {
            
get {
                
if (_Phrase == null) {
                    _Phrase 
= new Hashtable();

                    _Phrase.Add(
"重庆""Chong Qing");
                    _Phrase.Add(
"深圳""Shen Zhen");
                    _Phrase.Add(
"什么""Shen Me");
                }

                
return _Phrase;
            }

            
set { _Phrase = value; }
        }

        
/// <summary>
        
/// 将指定中文字符串转换为拼音形式。
        
/// </summary>
        
/// <param name="chs">要转换的中文字符串。</param>
        
/// <param name="separator">连接拼音之间的分隔符。</param>
        
/// <param name="initialCap">指定是否将首字母大写。</param>
        
/// <returns>包含中文字符串的拼音的字符串。</returns>
        public static string Convert(string chs, string separator, bool initialCap) {
            
if (chs == null || chs.Length == 0return "";
            
if (separator == null || separator.Length == 0) separator = "";

            
// 例外词组
            foreach (DictionaryEntry de in CHS2PinYin.Phrase) {
                chs 
= chs.Replace(de.Key.ToString(), String.Format(" {0} ", de.Value.ToString().Replace(" ", separator)));
            }

            
//先对字符做全角转半角
            chs = ToDBC(chs);
            chs 
= Microsoft.VisualBasic.Strings.StrConv(chs, Microsoft.VisualBasic.VbStrConv.SimplifiedChinese, 0);

            
byte[] array = new byte[2];
            
string returnstr = "";
            
int chrasc = 0;
            
int i1 = 0;
            
int i2 = 0;
            
bool b = false;
            
char[] nowchar = chs.ToCharArray();

            CultureInfo ci 
= Thread.CurrentThread.CurrentCulture;
            TextInfo ti 
= ci.TextInfo;

            
for (int j = 0; j < nowchar.Length; j++) {
                array 
= Encoding.Default.GetBytes(nowchar[j].ToString());
                
string s = nowchar[j].ToString(); ;

                
if (array.Length == 1) {
                    b 
= true;
                    returnstr 
+= s;
                }
                
else {
                    
if (s == "") {
                        
if (returnstr == "" || b == true) returnstr += s;
                        
else returnstr += separator + s;

                        
continue;
                    }

                    i1 
= (short)(array[0]);
                    i2 
= (short)(array[1]);

                    chrasc 
= i1 * 256 + i2 - 65536;

                    
for (int i = (pv.Length - 1); i >= 0; i--) {
                        
if (pv[i] <= chrasc) {
                            s 
= ps[i];

                            
if (initialCap == true) s = ti.ToTitleCase(s);

                            
if (returnstr == "" || b == true) returnstr += s;
                            
else returnstr += separator + s;

                            
break;
                        }
                    }

                    b 
= false;
                }
            }

            returnstr 
= returnstr.Replace(" ", separator);
            
return returnstr;
        }

        
/// <summary>
        
/// 将指定中文字符串转换为拼音形式。
        
/// </summary>
        
/// <param name="chs">要转换的中文字符串。</param>
        
/// <param name="separator">连接拼音之间的分隔符。</param>
        
/// <returns>包含中文字符串的拼音的字符串。</returns>
        public static string Convert(string chs, string separator) {
            
return CHS2PinYin.Convert(chs, separator, false);
        }

        
/// <summary>
        
/// 将指定中文字符串转换为拼音形式。
        
/// </summary>
        
/// <param name="chs">要转换的中文字符串。</param>
        
/// <param name="initialCap">指定是否将首字母大写。</param>
        
/// <returns>包含中文字符串的拼音的字符串。</returns>
        public static string Convert(string chs, bool initialCap) {
            
return CHS2PinYin.Convert(chs, "", initialCap);
        }

        
/// <summary>
        
/// 将指定中文字符串转换为拼音形式。
        
/// </summary>
        
/// <param name="chs">要转换的中文字符串。</param>
        
/// <returns>包含中文字符串的拼音的字符串。</returns>
        public static string Convert(string chs) {
            
return CHS2PinYin.Convert(chs, "");
        }

        
/// <summary>
        
/// 转全角的函数(SBC case)
        
/// </summary>
        
/// <param name="input">任意字符串</param>
        
/// <returns>全角字符串</returns>
        
///<remarks>
        
///全角空格为12288,半角空格为32
        
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        
///</remarks>        
        public static string ToSBC(string input) {
            
//半角转全角:
            char[] c = input.ToCharArray();
            
for (int i = 0; i < c.Length; i++) {
                
if (c[i] == 32) {
                    c[i] 
= (char)12288;
                    
continue;
                }
                
if (c[i] < 127)
                    c[i] 
= (char)(c[i] + 65248);
            }
            
return new string(c);
        }


        
/// <summary>
        
/// 转半角的函数(DBC case)
        
/// </summary>
        
/// <param name="input">任意字符串</param>
        
/// <returns>半角字符串</returns>
        
///<remarks>
        
///全角空格为12288,半角空格为32
        
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        
///</remarks>
        public static string ToDBC(string input) {
            
char[] c = input.ToCharArray();
            
for (int i = 0; i < c.Length; i++) {
                
if (c[i] == 12288) {
                    c[i] 
= (char)32;
                    
continue;
                }
                
if (c[i] > 65280 && c[i] < 65375)
                    c[i] 
= (char)(c[i] - 65248);
            }
            
return new string(c);
        }

        
///   <summary> 
        
///   转换为简体中文 
        
///   </summary> 
        public static string ToSChinese(string str) {
            
return Strings.StrConv(str, VbStrConv.SimplifiedChinese, 0);
        }

        
///   <summary> 
        
///   转换为繁体中文 
        
///   </summary> 
        public static string ToTChinese(string str) {
            
return Strings.StrConv(str, VbStrConv.TraditionalChinese, 0);
        }
    }
}

原创粉丝点击