用到的两个Nuget
包:
-
用于汉字转拼音:
Microsoft.International.Converters.PinYinConverter
-
用于汉字简繁切换:
Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter
代码:
using Microsoft.International.Converters.PinYinConverter;
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
using System;
namespace 简繁切换
{
class Program
{
static void Main(string[] args)
{
string Name = "汉昭烈帝刘备";
Console.WriteLine($"{Name}\n全拼:{GetPinyin(Name)},\n首拼:{GetFirstPinyin(Name)},\n繁体字:{GetTraditional(Name)},\n简体字:{GetSimplified(GetTraditional(Name))}");
Console.ReadKey();
}
/// <summary>
/// 汉字转化为拼音
/// </summary>
/// <param name="str">汉字</param>
/// <returns>全拼</returns>
public static string GetPinyin(string str)
{
string r = string.Empty;
foreach (char obj in str)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
string t = chineseChar.Pinyins[0].ToString();
r += t.Substring(0, t.Length - 1);
}
catch
{
r += obj.ToString();
}
}
return r;
}
/// <summary>
/// 汉字转化为拼音首字母
/// </summary>
/// <param name="str">汉字</param>
/// <returns>首字母</returns>
public static string GetFirstPinyin(string str)
{
string r = string.Empty;
foreach (char obj in str)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
string t = chineseChar.Pinyins[0].ToString();
r += t.Substring(0, 1);
}
catch
{
r += obj.ToString();
}
}
return r;
}
// <summary>
/// 简体转换为繁体
/// </summary>
/// <param name="str">简体字</param>
/// <returns>繁体字</returns>
public static string GetTraditional(string str)
{
string r = string.Empty;
r = ChineseConverter.Convert(str, ChineseConversionDirection.SimplifiedToTraditional);
return r;
}
/// <summary>
/// 繁体转换为简体
/// </summary>
/// <param name="str">繁体字</param>
/// <returns>简体字</returns>
public static string GetSimplified(string str)
{
string r = string.Empty;
r = ChineseConverter.Convert(str, ChineseConversionDirection.TraditionalToSimplified);
return r;
}
}
}
输出:
ChineseChar
类的用法
Microsoft.International.Converters.PinYinConverter
命名空间包含了拼音和笔画转换工具的类。
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入你要转的汉字");
string str = Console.ReadLine();
string py = GetPinYin(str);
Console.WriteLine(py);
}
//ChineseChar类的其他用法:
//1、静态方法:
// ->GetCharCount(Inter16) 检索具有指定笔画数的字符个数。
// ->GetChars(string) 返回具有相同的指定拼音的字符串列表
// ->GetChars(Inter16) 返回具有指定笔画的所有汉字。
// ->GetHomophoneCount(string) 检索具有指定拼音的字符数。
// ->GetStrokeNumber(Char) 检索指定字符的笔画数。
// ->IsHomophone(Char, Char) 识别给出的两个字符是否是同音字。
// ->IsValidChar(Char) 识别给出的字符串是否是一个有效的汉字字符。
// ->IsValidPinyin(String) 识别给出的拼音是否是一个有效的拼音字符串。
// ->IsValidStrokeNumber(Int16) 识别给出的笔画数是否是一个有效的笔画数。
//2、实例方法:
// ->ChineseCharNew(Char) ChineseChar类的构造函数。
// ->CompareStrokeNumber(Char) 将给出的字符和实例字符的笔画数进行比较。
// ->HasSound(String) 识别字符是否有指定的读音。
// -> IsHomophone(Char) 识别给出的字符是否是实例字符的同音字。
//3、实例属性:
// ->ChineseCharacter 获取这个汉字字符。
// ->IsPolyphone 获取这个字符是否是多音字。
// ->PinyinCount 获取这个字符的拼音个数。
// ->StrokeNumber 获取这个字符的笔画数
}
/// <summary>
/// 获得中文字符串的拼音
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static string GetPinYin(string str)
{
string py = "";
for (int i = 0; i < str.Length; i++)
{
if (ChineseChar.IsValidChar(str[i]))//判断当前字符是不是汉字
{
ChineseChar cc = new ChineseChar(str[i]);//构造方法
py += cc.Pinyins[0].TrimEnd('1', '2', '3', '4', '5').ToLower();
}
else//不是汉字的话 加本身
{
py += str[i];
}
}
return py;
}
}