微软的VS提供了Microsoft.International.Converters.PinYinConverter;可以通过他实现汉字到拼音的转换,然而没有五笔的转换。因工作需要,增加了五笔的转换。具体代码如下其中五笔助记符需要字库“PinYinWuBi.dll”,需要的朋友可以到我的资源中下载
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Microsoft.International.Converters.PinYinConverter;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Soft.Lib
{
/// <summary>
/// 拼音五笔助记符
/// </summary>
public class PyConverter
{
/// <summary>
/// 获取拼音助记符
/// </summary>
/// <param name="chinese_text">要转换的字符串</param>
/// <param name="len">输出助记符字符串最大长度</param>
/// <returns></returns>
public static string ToPy(string chinese_text, int len)
{
string rlt = "";
char[] chrs = chinese_text.ToCharArray();
foreach (char x in chrs)
{
if (ChineseChar.IsValidChar(x))
{
rlt += new ChineseChar(x).Pinyins[0][0];
}
else
rlt += x;
}
if (rlt.Length > len)
return rlt.Substring(0, len);
else
return rlt;
}
static DataTable tableWBPY = null;
static object Lock = new object();
static private DataTable TableWBPY
{
get
{
if (tableWBPY == null)
{
lock (Lock)
{
byte[] myBD = File.ReadAllBytes(Path.GetFullPath("PinYinWuBi.dll"));
MemoryStream stream = new MemoryStream(myBD);
IFormatter format = new BinaryFormatter();
stream.Position = 0;
tableWBPY = (DataTable)format.Deserialize(stream);
}
}
return tableWBPY;
}
}
/// <summary>
/// 获取五笔助记符
/// </summary>
/// <param name="chinese_text">要转换的字符串</param>
/// <param name="len">输出助记符字符串最大长度</param>
/// <returns></returns>
public static string ToWb(string chinese_text, int len)
{
string ret = ""; //返回字符串
char[] chrs = chinese_text.ToCharArray();
try
{
foreach (char x in chrs)
{
DataRow[] rowF = TableWBPY.Select(string.Format("F1 = '{0}'", x));
if (rowF.Length != 0)
{
ret = ret + rowF[0]["f2"].ToString().Substring(0, 1).ToUpper();
}
else
{
ret = ret + x;
}
}
}
catch (Exception ex)
{
ret = "";
}
if (ret.Length > len)
return ret.Substring(0, len);
else
return ret;
}
}
}