zoukankan      html  css  js  c++  java
  • asp.net 汉字转拼音的车祸现场

    asp.net 汉字转拼音

    需求背景:

           昨天遇到个问题,就是面对系统中集中性的要设置大批量的用户设置默认的用户名,密码,权限(角色),同时要求用户名是姓名的全拼,回头看看旁边那个哥们撸胳膊挽袖子准备一个个手动去设置,我眼角不自觉的抽了抽,因为这次需要设置的客户账户只是一百来人,那手动录入完手也得抽筋,何况后续还有八百多号用户要录入,想不通为什么一直没有人提出这个需求。作为一个天天本着每行代码都是奔着去改变世界的程序员来说,这个耍帅的机会怎么能错过,牛逼哄哄的告诉旁边那个哥们,“这活我来...”,然后就有了下面这一系列的问题。回去之前还很刁刁地和家里那位大人说,帮哥们把电脑桌整理出来,我今天晚上是要加班的人[装过头了]。

    实现过程:

      因为之前没有做过这方面的功能,回到家在电脑上草草的找了点资料(说的好像认真找就能找到似的,这么迷信),资料大概:

      穷举汉语拼音和汉字编码,遍历对比找对应的拼音,我自己也找了几个类copy下来试试,测试结果很正,很三观,很容易的迷惑了我,安心的去睡了,第二天,离结果提交还有一天的时间,第二天把代码直接拿到项目中开始写,写完测试一把,结果当大量的人员姓名进入之后,之前说的穷举拼音和汉字编码的bug暴露出来,一百多人大概有十几个人的名字识别不出来,比如,彧,玥,楠,婷(彧 没有出来我其实不怪它,本来我就不认识),中间这些字,看了一下断点,明明找到了编码,就是出不来。唉,我有什么办法,我也很无奈。刚开始以为字确实生僻,就在判断的初始就给程序对应的 拼音(算不算作弊),结果随着暴露出来的解析不了得汉字越来越多,果断放弃了这种方法,还有就是试了一下 穷举 拼音对应的汉字,我认为是穷举了,一大片,就和乱码似的,我也从那篇博文下面看到作者说,看上去不能用,其实挺好用的,我信了你的邪~!

      我怎么这么能啰嗦,上正菜:

    1. vsintlpack1.zip
    2. 下载vsintlpack1.zip后,解压安装其中的CHSPinYinConv.msi,如安装到C:Program FilesMicrosoft Visual Studio International PackSimplified 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

      

      

      

  • 相关阅读:
    ****阿里云使用+快速运维总结(不断更新)
    Linux 标准目录结构
    linux awk命令
    反射型 DDoS 攻击的原理和防范措施
    容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
    谈谈数据库的跨机房容灾-网易云
    前端 支持 超大上G,多附件上传
    java 支持 超大上G,多附件上传讨论
    java 支持 超大上G,多附件上传分享
    java 支持 超大上G,多附件上传功能
  • 原文地址:https://www.cnblogs.com/houlin/p/7700836.html
Copyright © 2011-2022 走看看