asp.net 漢字轉拼音的車禍現場

asp.net 漢字轉拼音

需求背景:

       昨天遇到個問題,就是面對系統中集中性的要設置大批量的用戶設置默認的用戶名,密碼,權限(角色),同時要求用戶名是姓名的全拼,回頭看看旁邊那個哥們擼胳膊挽袖子準備一個個手動去設置,我眼角不自覺的抽了抽,因爲這次需要設置的客戶賬戶只是一百來人,那手動錄入完手也得抽筋,何況後續還有八百多號用戶要錄入,想不通爲什麼一直沒有人提出這個需求。作爲一個天天本着每行代碼都是奔着去改變世界的程序員來說,這個耍帥的機會怎麼能錯過,牛逼哄哄的告訴旁邊那個哥們,“這活我來...”,然後就有了下面這一系列的問題。回去之前還很刁刁地和家裏那位大人說,幫哥們把電腦桌整理出來,我今天晚上是要加班的人[裝過頭了]。

實現過程:

  因爲之前沒有做過這方面的功能,回到家在電腦上草草的找了點資料(說的好像認真找就能找到似的,這麼迷信),資料大概:

  窮舉漢語拼音和漢字編碼,遍歷對比找對應的拼音,我自己也找了幾個類copy下來試試,測試結果很正,很三觀,很容易的迷惑了我,安心的去睡了,第二天,離結果提交還有一天的時間,第二天把代碼直接拿到項目中開始寫,寫完測試一把,結果當大量的人員姓名進入之後,之前說的窮舉拼音和漢字編碼的bug暴露出來,一百多人大概有十幾個人的名字識別不出來,比如,彧,玥,楠,婷(彧 沒有出來我其實不怪它,本來我就不認識),中間這些字,看了一下斷點,明明找到了編碼,就是出不來。唉,我有什麼辦法,我也很無奈。剛開始以爲字確實生僻,就在判斷的初始就給程序對應的 拼音(算不算作弊),結果隨着暴露出來的解析不了得漢字越來越多,果斷放棄了這種方法,還有就是試了一下 窮舉 拼音對應的漢字,我認爲是窮舉了,一大片,就和亂碼似的,我也從那篇博文下面看到作者說,看上去不能用,其實挺好用的,我信了你的邪~!

  我怎麼這麼能囉嗦,上正菜:

  1. vsintlpack1.zip
  2. 下載vsintlpack1.zip後,解壓安裝其中的CHSPinYinConv.msi,如安裝到C:\Program Files\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library ,可以看到以下文件。
  3. 在項目中添加引用,在步驟2安裝目錄下添加引用ChnCharInfo.dll。

  4. 測試代碼:類文件
    using Microsoft.International.Converters.PinYinConverter;
    
    namespace XLZF.Box
    {
        public class PinyinHelper
        {
            //返回字符串的簡拼  
            public string getSimplePinYin(string inputTxt)
            {
                string shortR = "";
                foreach (char cin in inputTxt.Trim())
                {
                    ChineseChar chineseChar = new ChineseChar(cin);
                    shortR += chineseChar.Pinyins[0].Substring(0, 1).ToLower();
                }
                return shortR;
            }
    
            //返回字符串全拼  
            public string getAllPinYin(string inputTxt)
            {
                string allR = "";
                foreach (char cin in inputTxt.Trim())
                {
                    ChineseChar chineseChar = new ChineseChar(cin);
                    allR += chineseChar.Pinyins[0].Substring(0, chineseChar.Pinyins[0].Length - 1).ToLower();
                }
                return allR;
            }
        }
    
    }
  5. 頁面後臺:
    protected void btn_zhuan_Click(object sender, EventArgs e)
    {
          PinyinHelper chinapy = new PinyinHelper();
    
          string hanzi = tb_hanzi.Text.Trim();
    
          tb_pingyin.Text = chinapy.getAllPinYin(hanzi);
    
          tb_shouzimu.Text = chinapy.getSimplePinYin(hanzi);
    }
  6. 頁面前臺:
    <div class="row" style="margin-top: 20px;">
         <div class="col-md-12">
                    <div class="col-md-2">
                        <div class="input-group">
                            <span class="input-group-addon">漢字</span>
                            <asp:TextBox runat="server" ID="tb_hanzi" CssClass="form-control"></asp:TextBox>
                        </div>
                    </div>
                    <div class="col-md-2">
                        <div class="input-group">
                            <span class="input-group-addon">全拼</span>
                            <asp:TextBox runat="server" ID="tb_pingyin" CssClass="form-control"></asp:TextBox>
                        </div>
                    </div>
                    <div class="col-md-2">
                        <div class="input-group">
                            <span class="input-group-addon">首字母</span>
                            <asp:TextBox runat="server" ID="tb_shouzimu" CssClass="form-control"></asp:TextBox>
                        </div>
                    </div>
                    <div class="col-md-2">
                        <asp:Button runat="server" ID="btn_zhuan" CssClass="btn btn-primary" Text="轉換" OnClick="btn_zhuan_Click" />
                    </div>
             </div>
        </div>
  7. 結果截圖:
  8. 這個是微軟老大出的一個DLL,但是類似剛纔遇到的有些多音字,尤其是姓氏,翻譯錯了,真的特尷尬。確保出拼音這塊沒什麼問題了加上權限一些問題,磨磨唧唧的既然晚上12點了,騎上小電驢冒着深秋的寒風加上濃濃的霧氣回家。
  9. 以上部分 轉自 :狼人666

  

  

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章