前不久看到有的朋友實現對商品名稱拼音的錄入,發現他的實現方式是手動輸入的,—_—#、同志們,福利來了!
本文剛發布時,只寫了一個實現方式,使用的是微軟的語言包,但是對多音字的效果不怎么理想,甚至個別字會出現很詭異的錯誤,因此,現在擴展另一個方法,手動實現。
方式一、使用微軟語言包 微軟為了開發者實現國際化語言的互轉,提供了Microsoft Visual Studio International Pack,這個擴展包里面有中文、日文、韓文、英語等各國語言包,并提供方法實現互轉、獲取拼音、獲取字數、甚至獲取筆畫數等等。
[這種方式對多音字的效果不怎么理想,但是,這個方法比較簡單,直接導入包就可以了,因此,對于那些只需要個別語句進行處理的或者不注重多音字的,可以使用這種方式,畢竟簡便嘛。] 在這里示例講的是輸入漢字,獲取其拼音,獲取拼音和獲取拼音首字母實現效果分別如下:
首先,去微軟官網下載Microsoft Visual Studio International Pack語言包,下載地址分別如下:Microsoft Visual Studio International Pack 1.0 SR1、Microsoft Visual Studio International Feature Pack 2.0 下載后分別是“vsintlpack1.zip”、“Vsintlpack2.msi”、雙擊“Vsintlpack2.msi”安裝、路徑隨意、但是要記得、因為一會要引用的、 安裝“Vsintlpack2.msi”之后、解壓“vsintlpack1.zip”、里面包含七個語言包、 例如中文轉拼音“CHSPinYinConv.msi”、簡體繁體互轉“CHTCHSConv.msi”等等。。 在這里我們用到的是“CHSPinYinConv.msi”、雙擊安裝成功后、打開Visual Studio、新建一個WinForm項目、窗體布局如上圖所示、
首先:添加剛剛安裝的語言包引用:
“D:/PRogram Files (x86)/Microsoft Visual Studio International Pack/Simplified Chinese Pin-Yin Conversion Library/ChnCharInfo.dll”
默認是C盤、在這里我安裝在D盤了,然后添加using引用:
1 using Microsoft.International.Converters.PinYinConverter;//導入拼音相關
創建獲取拼音的方法:

1 /// <summary> 2 /// 漢字轉化為拼音 3 /// </summary> 4 /// <param name="str">漢字</param> 5 /// <returns>全拼</returns> 6 public static string GetPinyin(string str) 7 { 8 string r = string.Empty; 9 foreach (char obj in str)10 {11 try12 {13 ChineseChar chineseChar = new ChineseChar(obj);14 string t = chineseChar.Pinyins[0].ToString();15 r += t.Substring(0, t.Length - 1);16 }17 catch18 {19 r += obj.ToString();20 }21 }22 return r;23 }漢字轉化為拼音創建獲取漢字拼音首字母的方法:

1 /// <summary> 2 /// 漢字轉化為拼音首字母 3 /// </summary> 4 /// <param name="str">漢字</param> 5 /// <returns>首字母</returns> 6 public static string GetFirstPinyin(string str) 7 { 8 string r = string.Empty; 9 foreach (char obj in str)10 {11 try12 {13 ChineseChar chineseChar = new ChineseChar(obj);14 string t = chineseChar.Pinyins[0].ToString();15 r += t.Substring(0, 1);16 }17 catch18 {19 r += obj.ToString();20 }21 }22 return r;23 }漢字轉化為拼音首字母然后在“轉拼音”按鈕的點擊事件中調用上述方法:

1 // 漢字轉拼音2 private void btn_One_Click(object sender, EventArgs e)3 {4 string source = this.txt_ChineseCharacter_One.Text.Trim(); // 得到輸入的源字符5 string result = GetPinyin(source); // 調用方法,獲取拼音6 this.txt_Pinyin_One.Text = result;7 }然后在“轉拼音”按鈕的點擊事件中調用上述方法在“轉首字母”按鈕點擊事件中調用上述方法:

1 // 轉首字母2 private void btn_Two_Click(object sender, EventArgs e)3 {4 string source = this.txt_ChineseCharacter_One.Text.Trim(); // 得到輸入的源字符5 string result = GetFirstPinyin(source); // 調用方法,獲取拼音6 this.txt_Pinyin_One.Text = result;7 }在“轉首字母”按鈕點擊事件中調用上述方法: 到此,已經完成了80%,運行程序,你會發現,當點擊“轉拼音”的時候,結果是這樣子的:
并不是我開始說的那種“Gu Ying”的效果啊、這是因為我在獲取拼音的時候簡單的處理了一下:

1 // 漢字轉拼音 2 private void btn_One_Click(object sender, EventArgs e) 3 { 4 string source = this.txt_ChineseCharacter_One.Text.Trim(); // 得到輸入的源字符 5 6 string result = string.Empty; // 轉拼音的結果 7 string temp = string.Empty; // 下面foreach用到的臨時變量 8 foreach (char item in source) // 遍歷每個源字符 9 {10 temp = GetPinyin(item.ToString()); // 將每個字符轉拼音11 // 處理:獲取首字母大寫、其余字母小寫12 result += (String.Format("{0}{1} ", temp.Substring(0, 1).ToUpper(), temp.Substring(1).ToLower()));13 }14 15 //string result = GetPinyin(source); // 調用方法,獲取拼音16 this.txt_Pinyin_One.Text = result;17 }處理拼音結果OK、到此、這個功能已經實現完成了,還有其余的語言包功能,和此類似,大家可以百度“Microsoft Visual Studio International Pack使用”、各種語言之間的互轉及功能示例就出來了。
方式二、手動編碼實現
這種方式其實也不困難,說白了就是根據Unicode編碼值,定義對應的拼音數組或集合,然后實現此效果。
首先定義拼音區編碼數組:

1 //定義拼音區編碼數組 2 private static int[] getValue = new int[] 3 { 4 -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051,-20036, 5 -20032,-20026,-20002,-19990,-19986,-19982,-19976,-19805,-19784,-19775,-19774,-19763, 6 -19756,-19751,-19746,-19741,-19739,-19728,-19725,-19715,-19540,-19531,-19525,-19515, 7 -19500,-19484,-19479,-19467,-19289,-19288,-19281,-19275,-19270,-19263,-19261,-19249, 8 -19243,-19242,-19238,-19235,-19227,-19224,-19218,-19212,-19038,-19023,-19018,-19006, 9 -19003,-18996,-18977,-18961,-18952,-18783,-18774,-18773,-18763,-18756,-18741,-18735,10 -18731,-18722,-18710,-18697,-18696,-18526,-18518,-18501,-18490,-18478,-18463,-18448,11 -18447,-18446,-18239,-18237,-18231,-18220,-18211,-18201,-18184,-18183, -18181,-18012,12 -17997,-17988,-17970,-17964,-17961,-17950,-17947,-17931,-17928,-17922,-17759,-17752,13 -17733,-17730,-17721,-17703,-17701,-17697,-17692,-17683,-17676,-17496,-17487,-17482,14 -17468,-17454,-17433,-17427,
新聞熱點
疑難解答