using System;
using System.Collections;
using System.Globalization;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic;
using Microsoft.Office.Interop.Word;
using System.Reflection;
namespace WindowsFormsApplication1
{
/// <summary>
/// 汉字转拼音工具。
/// </summary>
public sealed class CHS2PinYin
{
#region pingyin /// <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; } } #endregion |
/// <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)
{
}
/// <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);
}
/// <summary>
/// 简体转换为繁体
/// </summary>
/// <param name="src"></param>
/// <returns></returns>
public static string CHS2CHT(string src)
{
string des = "";
_Application appWord = new Application();
object template = Missing.Value;
object newTemplate = Missing.Value;
object docType = Missing.Value;
object visible = true;
Document doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible);
appWord.Selection.TypeText(src);
appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionSCTC, true, true);
appWord.ActiveDocument.Select();
des = appWord.Selection.Text;
object saveChange = 0;
object originalFormat = Missing.Value;
object routeDocument = Missing.Value;
appWord.Quit(ref saveChange, ref originalFormat, ref routeDocument);
doc = null;
appWord = null;
GC.Collect();//进程资源释放
return des;
}
/// <summary>
/// 繁体转换为简体
/// </summary>
/// <param name="src"></param>
/// <returns></returns>
public static string CHT2CHS(string src)
{
string des = "";
_Application appWord = new Application();
object template = Missing.Value;
object newTemplate = Missing.Value;
object docType = Missing.Value;
object visible = true;
Document doc = appWord.Documents.Add(ref template, ref newTemplate, ref docType, ref visible);
appWord.Selection.TypeText(src);
appWord.Selection.Range.TCSCConverter(WdTCSCConverterDirection.wdTCSCConverterDirectionTCSC, true, true);
appWord.ActiveDocument.Select();
des = appWord.Selection.Text;
object saveChange = 0;
object originalFormat = Missing.Value;
object routeDocument = Missing.Value;
appWord.Quit(ref saveChange, ref originalFormat, ref routeDocument);
doc = null;
appWord = null;
GC.Collect();//进程资源释放
return des;
}
}
}