C#獲取漢字拼音和首字母


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM