转自:http://www.cnblogs.com/soundcode/p/6247531.html
汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案。
1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z
2.Microsoft Visual Studio International Feature Pack 1.0 连"广"、“区”都不能转,很让人失望。
这些都是2010年以前的方案,至少还有大侠在为汉字转拼音不断努力着,目前发现最完美的就是NPINYIN,在googlecode可以看到它的开源项目,http://code.google.com/p/npinyin/
不能识别的字很少,而且还在不断维护更新,日趋完美,推荐大家使用。
下载地址
dll:http://files.cnblogs.com/files/guohu/NPinyin-0.2.4588.20158-bin.zip
源码:http://files.cnblogs.com/files/guohu/NPinyin-0.2.x-source_code.zip
汪思言 2012年7月23日晚
将中文转换成拼音全文和首字母的.net 组件。示例:
using System;
using System.Collections.Generic;
using System.Text;
using NPinyin;
namespace NPinyinTest
{
class Program
{
static void Main(string[] args)
{
string[] maxims = new string[]{
"事常与人违,事总在人为",
"骏马是跑出来的,强兵是打出来的",
"驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。 ",
"如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭",
"懦弱的人只会裹足不前,莽撞的人只能引为烧身,只有真正勇敢的人才能所向披靡"
};
string[] medicines = new string[] {
"聚维酮碘溶液",
"开塞露",
"炉甘石洗剂",
"苯扎氯铵贴",
"鱼石脂软膏",
"莫匹罗星软膏",
"红霉素软膏",
"氢化可的松软膏",
"曲安奈德软膏",
"丁苯羟酸乳膏",
"双氯芬酸二乙胺乳膏",
"冻疮膏",
"克霉唑软膏",
"特比奈芬软膏",
"酞丁安软膏",
"咪康唑软膏、栓剂",
"甲硝唑栓",
"复方莪术油栓"
};
Console.WriteLine("UTF8句子拼音:");
foreach (string s in maxims)
{
Console.WriteLine("汉字:{0}\n拼音:{1}\n", s, Pinyin.GetPinyin(s));
}
Encoding gb2312 = Encoding.GetEncoding("GB2312");
Console.WriteLine("GB2312拼音简码:");
foreach (string m in medicines)
{
string s = Pinyin.ConvertEncoding(m, Encoding.UTF8, gb2312);
Console.WriteLine("药品:{0}\n简码:{1}\n", s, Pinyin.GetInitials(s, gb2312));
}
Console.ReadKey();
System;
using System.Collections.Generic;
using System.Text;
using NPinyin;
namespace NPinyinTest
{
class Program
{
static void Main(string[] args)
{
string[] maxims = new string[]{
"事常与人违,事总在人为",
"骏马是跑出来的,强兵是打出来的",
"驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。 ",
"如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭",
"懦弱的人只会裹足不前,莽撞的人只能引为烧身,只有真正勇敢的人才能所向披靡"
};
string[] medicines = new string[] {
"聚维酮碘溶液",
"开塞露",
"炉甘石洗剂",
"苯扎氯铵贴",
"鱼石脂软膏",
"莫匹罗星软膏",
"红霉素软膏",
"氢化可的松软膏",
"曲安奈德软膏",
"丁苯羟酸乳膏",
"双氯芬酸二乙胺乳膏",
"冻疮膏",
"克霉唑软膏",
"特比奈芬软膏",
"酞丁安软膏",
"咪康唑软膏、栓剂",
"甲硝唑栓",
"复方莪术油栓"
};
Console.WriteLine("UTF8句子拼音:");
foreach (string s in maxims)
{
Console.WriteLine("汉字:{0}\n拼音:{1}\n", s, Pinyin.GetPinyin(s));
}
Encoding gb2312 = Encoding.GetEncoding("GB2312");
Console.WriteLine("GB2312拼音简码:");
foreach (string m in medicines)
{
string s = Pinyin.ConvertEncoding(m, Encoding.UTF8, gb2312);
Console.WriteLine("药品:{0}\n简码:{1}\n", s, Pinyin.GetInitials(s, gb2312));
}
Console.ReadKey();