C# 转繁体转简体转拼音,超级文本大转换
生活随笔
收集整理的這篇文章主要介紹了
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?==?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)));
????????????}
????????????//先對字符做全角轉半角
????????????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);
????????}
????}
}
?
?
轉載于:https://www.cnblogs.com/luqingfei/archive/2011/01/17/1937058.html
總結
以上是生活随笔為你收集整理的C# 转繁体转简体转拼音,超级文本大转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言宠物管理系统,请用C语言编出一个简
- 下一篇: 鸟哥linux基础篇学完到什么程度,学完