`
iomo
  • 浏览: 38770 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

汉字转拼音

    博客分类:
  • .net
阅读更多

 

StrToPinyin.cs

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace JM.Dreamzx.Bll
{
    public   class StrToPinyin
    {
        public StrToPinyin()
        { }

        private static string[] strChineseCharList = 
            { 
#region

                "A阿啊锕嗄厑哎哀唉埃挨溾锿鎄啀捱皑凒溰嘊敳皚癌毐昹嗳矮蔼躷噯藹譪霭靄艾伌爱砹硋隘嗌塧嫒愛碍暧瑷僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵谙萻腤鹌蓭誝鞌鞍盦馣鮟盫韽啽雸垵"   , 
                "A俺唵埯铵隌揞罯銨犴岸按荌案胺豻堓婩暗貋儑錌黯肮岇昂昻枊盎醠凹坳垇柪軪爊敖厫隞嗷嗸嶅廒滶獒獓遨熬璈蔜翱聱螯翶謷翺鳌鏖鰲鷔鼇芺袄媪镺襖岙扷岰傲奡奥嫯慠骜奧嶴澳懊擙謸鏊"   , 
                #endregion
            };
        /// <summary> 
        /// 获得一个字符串的汉语拼音码 
        /// </summary> 
        /// <param name="strText">字符串</param> 
        /// <returns>汉语拼音码,该字符串只包含大写的英文字母</returns> 
        public static string GetChineseSpell(string strText)
        {
            if (strText == null || strText.Length == 0)
                return strText;
            System.Text.StringBuilder myStr = new System.Text.StringBuilder();
            foreach (char vChar in strText)
            {
                // 若是字母则直接输出 
                if ((vChar >= 'a' && vChar <= 'z') || (vChar >= 'A' && vChar <= 'Z'))
                    myStr.Append(char.ToUpper(vChar));
                else if ((int)vChar >= 19968 && (int)vChar <= 40869)
                {
                    // 若字符Unicode编码在编码范围则 查汉字列表进行转换输出 
                    foreach (string strList in strChineseCharList)
                    {
                        if (strList.IndexOf(vChar) > 0)
                        {
                            myStr.Append(strList[0]);
                            break;
                        }
                    }
                }
            }
            return myStr.ToString();
        }// GetChineseSpell  
    }
}

 

 

   ConvertHzToPz_Gb2312.cs

 

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

namespace JM.Dreamzx.Bll
{
  public   class ConvertHzToPz_Gb2312
    {
        public ConvertHzToPz_Gb2312()
        {
            //
            // TODO: Add constructor logic here
            //
        }


        //01-09区为特殊符号。 
        //16-55区为一级汉字,按拼音排序。 
        //56-87区为二级汉字,按部首/笔画排序。
        // 每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。
        //“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。
        //例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。
        //源码下载:http://www.51aspx.com/CV/HanZiZhuanPinYin
        #region //gb2312中的汉字编码
        private static readonly string[][] _Allhz =
         new string[][]
   {
    new string[]{"A","啊阿呵吖嗄腌锕錒"},
    new string[]{"Ai","爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭乂乃伌僾儗凒剀剴叆呃呝啀嘊噫噯堨塧壒奇娭娾嬡嵦愛懓懝敱敳昹曖欬欸毐溰溾濭烠焥璦皚皧瞹硋磑礙絠薆藹諰譪譺賹躷醷鎄鑀閡阂阨阸隑靄靉餲馤騃鯦鱫鴱崖"},
          #endregion


        public static string Convert(string str)
        {
            if (str == null)
                return null;
            Encoding ed = Encoding.GetEncoding("GB2312");
            if (ed == null)
                throw (new ArgumentException("没有找到编码集GB2312"));
            int bh = 0;
            char[] charary = str.ToCharArray();
            byte[] bAry = new byte[2];
            StringBuilder rtnSb = new StringBuilder();
            for (int i = 0; i < charary.Length; i++)
            {

                bAry = ed.GetBytes(charary[i].ToString());
                if (bAry.Length == 1)
                {
                    rtnSb.Append(charary[i]);
                    continue;
                }
                bh = bAry[0] - 0xA0;
                if (0x10 <= bh && bh <= 0x57)//是gb2312汉字
                {
                    bool isFind = false;
                    for (int j = 0; j < _Allhz.Length; j++)
                    {
                        if (_Allhz[j][1].IndexOf(charary[i]) != -1)
                        {
                            rtnSb.Append(_Allhz[j][0]);
                            isFind = true;
                            break;
                        }
                    }
                    if (!isFind)
                        rtnSb.Append(charary[i]);

                }
                else
                    rtnSb.Append(charary[i]);

            }
            return rtnSb.ToString();
        }



    }
}

 

 

            //lbPinyin.Text = "首字母是:" + StrToPinyin.GetChineseSpell(txtChn.Text) + "<br>拼音是:" + ConvertHzToPz_Gb2312.Convert(txtChn.Text);
            string user_simple = StrToPinyin.GetChineseSpell(uname).ToLower();
            string user_full   = ConvertHzToPz_Gb2312.Convert(uname).ToLower();

 (来源:http://www.iomo.cn)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics