C#獲取漢字拼音和首字母
引入NPinyin
using NPinyin;
調用
/// <summary> /// 中文首字母大寫 /// </summary> /// <param name="str">中文</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 name="str">中文</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