标签:
C#获取汉字拼音和首字母引入NPinyin
using NPinyin;
调用
/// <summary>
/// 中文首字母大写
/// </summary>
/// <param>中文</param>
/// <returns></returns>
public String GetSpellCode(string str)
{
Encoding gb2312 = Encoding.GetEncoding("GB2312");
string strA = Pinyin.ConvertEncoding(str, Encoding.UTF8, gb2312);
//首字母
string strB = Pinyin.GetInitials(strA, gb2312);
//拼音
//string strC = Pinyin.GetPinyin(str);
return strB;
}
报错
Unhandled Exception: System.ArgumentException: ‘GB2312‘ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
解决 原因使用如下代码检查支持的编码:
System.Text.Encoding.GetEncodings();
发现获得的编码中没有GB2312或者GBK。
解决方案
1.
第一步
向项目中添加如下包:
System.Text.Encoding.CodePages
根据 System.Text.Encoding.CodePages nuget主页 的描述,这个包能为程序提供 Windows-1252, Shift-JIS, and GB2312 三种编码。
第二步
根据错误提示,我们需要对引用的编码使用 Encoding.RegisterProvider 函数进行注册。
在使用 System.Text.Encoding.GetEncoding ("GB2312") 之前,在代码中执行:
System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);
注册完之后,获取 GB2312 编码对象就不会报错了,并且可以正常使用其中的函数。
完整代码是:
/// <summary>
/// 中文首字母大写
/// </summary>
/// <param>中文</param>
/// <returns></returns>
public String GetSpellCode(string str)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//注册编码对象
Encoding gb2312 = Encoding.GetEncoding("GB2312");
string strA = Pinyin.ConvertEncoding(str, Encoding.UTF8, gb2312);
//首字母
string strB = Pinyin.GetInitials(strA, gb2312);
//拼音
//string strC = Pinyin.GetPinyin(str);
return strB;
}
参考:https://blog.csdn.net/qq_22103321/article/details/85863879
标签:
原文地址:https://www.cnblogs.com/xuqp/p/11555929.html