最近修改了项目中的一个bug,是因为取汉子拼音首字母的方法有问题导致一些字的首字母获取错误,在网上找了一些现成的方法进行测试,发现下面的方法虽然比较笨,但准确率还是挺高。
C#代码
- /// <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
- private static string[] strChineseCharList =
- {
- "A阿啊锕嗄厑哎哀唉埃挨溾锿鎄啀捱皑凒溰嘊敳皚癌毐昹嗳矮蔼躷噯藹譪霭靄艾伌爱砹硋隘嗌塧嫒愛碍暧瑷僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵谙萻腤鹌蓭誝鞌鞍盦馣鮟盫韽啽雸垵" ,
- "A俺唵埯铵隌揞罯銨犴岸按荌案胺豻堓婩暗貋儑錌黯肮岇昂昻枊盎醠凹坳垇柪軪爊敖厫隞嗷嗸嶅廒滶獒獓遨熬璈蔜翱聱螯翶謷翺鳌鏖鰲鷔鼇芺袄媪镺襖岙扷岰傲奡奥嫯慠骜奧嶴澳懊擙謸鏊" ,
- "B八仈巴叭扒朳玐吧夿岜芭疤哵捌笆粑紦羓蚆釟豝鲃魞叐犮抜坺妭拔茇炦癹胈釛菝詙跋軷魃把靶坝弝爸垻罢鲅鮁覇矲霸壩灞欛挀掰白百佰柏栢捭竡粨摆擺襬呗拝败拜唄敗稗粺鞁薭贁兡瓸扳" ,
- "B攽班般颁斑搬斒瘢螁癍辬阪坂岅昄板版瓪钣粄舨鈑蝂魬办半伴扮姅怑拌绊秚絆鉡靽辦瓣邦峀垹帮捠梆浜邫幇幚縍幫鞤绑綁榜膀玤蚌傍棒谤塝稖蒡蜯磅镑艕謗勹包佨孢苞胞笣煲龅蕔褒闁齙" ,
- "B窇嫑雹宝怉饱保鸨珤堡堢媬葆寚飹飽褓駂鳵緥鴇賲藵寳寶靌勽报抱豹趵菢鲍靤骲暴髱虣儤曓爆忁鑤萡陂卑杯盃桮悲揹碑鹎藣鵯喺北鉳贝狈貝邶备昁牬苝背钡俻倍悖狽被偝偹梖珼鄁備僃惫" ,
- "B焙軰辈愂碚禙蓓蛽犕褙誖骳輩鋇憊糒鞴鐾奔泍贲倴渀逩犇锛錛本苯奙畚楍坌捹桳笨撪輽伻崩绷閍嵭嘣綳繃甭埲菶琫鞛泵迸塴甏镚蹦鏰屄毴逼豍鲾鵖鰏柲荸鼻嬶匕比夶朼佊吡妣沘疕彼柀秕" ,
- "B俾笔粊舭筆鄙聛貏匂币必毕闭佖坒庇诐邲妼怭畀畁哔毖珌疪荜陛毙狴畢袐铋婢庳敝梐萆萞閇閉堛弻弼愊愎湢皕禆筚詖貱赑嗶彃楅滗滭煏痹腷蓖蓽蜌裨跸閟飶幣弊熚獙碧箅綼蔽鄪馝幤潷獘" ,
VB.Net代码
- '/ <summary>
- '/ 获得一个字符串的汉语拼音码
- '/ </summary>
- '/ <param name="strText">字符串</param>
- '/ <returns>汉语拼音码,该字符串只包含大写的英文字母</returns>
- Public Shared Function GetChineseSpell(ByVal strText As String) As String
- If strText = Nothing Or strText.Length = 0 Then
- Return strText
- End If
- Dim myStr As System.Text.StringBuilder = New System.Text.StringBuilder()
- Dim vChar As Char
- For Each vChar In strText
- ' 若是字母则直接输出
- If (vChar >= "a"c And vChar <= "z"c) Or (vChar >= "A"c And vChar <= "Z"c) Then
- myStr.Append(vChar)
- ElseIf Microsoft.VisualBasic.AscW(vChar) >= 19968 And Microsoft.VisualBasic.AscW(vChar) <= 40869 Then
- ' 若字符Unicode编码在编码范围则 查汉字列表进行转换输出
- Dim strList As String
- For Each strList In strChineseCharList
- If strList.IndexOf(vChar) > 0 Then
- myStr.Append(strList(0))
- Exit For
需要注意的是C#和VB.Net在处理Unicode编码时有些区别,VB.Net使用
来进行转换。