zoukankan      html  css  js  c++  java
  • C# 转繁体转简体转拼音,超级文本大转换

    最近项目中遇到一个需求:把员工的中文姓名根据系统配置转换成中文简体或中文繁体。

    原以为需要一个很大的一个简体和繁体相对应的字符对应表之类的东西。

    后来发现,VB中就包含了这样的函数Strings.StrConv(this.TextBox1.Text.Trim(), VbStrConv.TraditionalChinese, 0);

    在网上搜索一下,还搜索到了转拼音,好东西,一定要收藏起来。哈哈!

    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);
            }
        }
    }
  • 相关阅读:
    分梨
    18岁生日
    马的移动
    摆积木
    杭电2093考试排名
    栈的应用——四则运算表达式求值
    用指针实现对二维数组元素的访问
    用多种方法访问字符数组元素
    fread()函数和fwrite()函数进行文件操作
    hdu-1431 素数回文
  • 原文地址:https://www.cnblogs.com/luqingfei/p/1937058.html
Copyright © 2011-2022 走看看