• C#汉字转拼音代码分享|建议收藏 狼人:


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    using System.Globalization;
    using System.Threading;
    using System.Data;
    
    namespace Net.Common
    {
        /// <summary>
        /// 汉字转拼音工具
        /// </summary>
        internal 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>
            internal static Hashtable Phrase
            {
                get
                {
                    if (_Phrase == null)
                    {
                        _Phrase = new Hashtable();
                        _Phrase.Add("吴艾伟", "Wu Ai Wei");
                        //_Phrase.Add("艾伟", "Ai Wei");
                    }
                    return _Phrase;
                }
                set { _Phrase = value; }
            }
    
            /// <summary>
            /// 将指定中文字符串转换为拼音形式。
            /// </summary>
            /// <param name="chs">要转换的中文字符串。</param>
            /// <param name="separator">连接拼音之间的分隔符。</param>
            /// <param name="initialCap">指定是否将首字母大写。</param>
            /// <returns>包含中文字符串的拼音的字符串。</returns>
            internal static string Convert(string chs, string separator, bool initialCap)
            {
                if (chs == null || chs.Length == 0) return "";
                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)));
                }
                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>
            internal 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>
            internal static string Convert(string chs, bool initialCap)
            {
                return CHS2PinYin.Convert(chs, "", initialCap);
            }
    
            /// <summary>
            /// 将指定中文字符串转换为拼音形式。
            /// </summary>
            /// <param name="chs">要转换的中文字符串。</param>
            /// <returns>包含中文字符串的拼音的字符串。</returns>
            internal static string Convert(string chs)
            {
                return CHS2PinYin.Convert(chs, "");
            }
    
            /// <summary>
            /// 转换为汉字拼音首字母
            /// </summary>
            /// <param name="chs"></param>
            /// <returns></returns>
            internal static string TransCapital(string chs)
            {
                return CHS2PinYin.Convert(chs).Length > 0 ? CHS2PinYin.Convert(chs).Substring(0, 1).ToUpper() : "";
            }
    
            /// <summary>
            /// 将DataTable中的指定列添加中文首字母
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="textField">COLUMN_NAME</param>
            /// <returns></returns>
            internal static DataTable TransCapital(DataTable dt, string textField)
            {
                return TransCapital(dt, textField, "-");
            }
    
            /// <summary>
            /// 将DataTable中的指定列添加中文首字母
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="textField">"COLUMN_NAME"</param>
            /// <param name="separator">连接拼音之间的分隔符。</param>
            /// <returns></returns>
            internal static DataTable TransCapital(DataTable dt, string textField, string separator)
            {
                foreach (DataRow row in dt.Rows)
                {
                    string text = row[textField].ToString();
                    row[textField] = TransCapital(row[textField].ToString()) + separator + text;
                }
                dt.DefaultView.Sort = textField;
                return dt;
            }
        }
    }
    

      

    声明:此博有部分内容为转载,版权归原作者所有~
  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/waw/p/2220376.html
Copyright © 2020-2023  润新知