在之前的文章中曾經介紹過如何在Windows Phone下擷取漢字的所有拼音,當時的方法是將所有的漢字、拼音放到一個集合中,然後匹配尋找的,這樣就會導致一個問題,就是沒有在集合中的漢字是找不到拼音的,也會有一些異常情況的發生。
今天介紹一種新的方法,使用codeplex上開源的項目GB2312 for Silverlight.
1.建立一個項目,命名為mangoGB2312
2.將GB2312 for Silverlight項目中的兩個檔案都拷貝至項目目錄GB2312下,並且修改GB2312Encoding.cs的命名空間為mangoGB2312.GB2312,如所示
3.將gb2312.bin的產生方式修改為嵌入式資源,如
4.編寫提取漢字首字母的函數,我已經封裝到一個協助類裡面了,代碼如下:
public class FirstLetterHelper{ /// <summary> /// 得到一個漢字的拼音第一個字母,如果是一個英文字母則直接返回大寫字母 /// </summary> /// <param name="CnChar">單個漢字</param> /// <returns>單個大寫字母</returns> public static string GetCharSpellCode(string CnChar) { long iCnChar; GB2312Encoding encoder = new GB2312Encoding(); byte[] ZW = encoder.GetBytes(CnChar); //如果是字母,則直接返回 if (ZW.Length == 1) { return CnChar.ToUpper(); } else { // get the array of byte from the single char int i1 = (short)(ZW[0]); int i2 = (short)(ZW[1]); iCnChar = i1 * 256 + i2; } // iCnChar match the constant if ((iCnChar >= 45217) && (iCnChar <= 45252)) { return "A"; } else if ((iCnChar >= 45253) && (iCnChar <= 45760)) { return "B"; } else if ((iCnChar >= 45761) && (iCnChar <= 46317)) { return "C"; } else if ((iCnChar >= 46318) && (iCnChar <= 46825)) { return "D"; } else if ((iCnChar >= 46826) && (iCnChar <= 47009)) { return "E"; } else if ((iCnChar >= 47010) && (iCnChar <= 47296)) { return "F"; } else if ((iCnChar >= 47297) && (iCnChar <= 47613)) { return "G"; } else if ((iCnChar >= 47614) && (iCnChar <= 48118)) { return "H"; } else if ((iCnChar >= 48119) && (iCnChar <= 49061)) { return "J"; } else if ((iCnChar >= 49062) && (iCnChar <= 49323)) { return "K"; } else if ((iCnChar >= 49324) && (iCnChar <= 49895)) { return "L"; } else if ((iCnChar >= 49896) && (iCnChar <= 50370)) { return "M"; } else if ((iCnChar >= 50371) && (iCnChar <= 50613)) { return "N"; } else if ((iCnChar >= 50614) && (iCnChar <= 50621)) { return "O"; } else if ((iCnChar >= 50622) && (iCnChar <= 50905)) { return "P"; } else if ((iCnChar >= 50906) && (iCnChar <= 51386)) { return "Q"; } else if ((iCnChar >= 51387) && (iCnChar <= 51445)) { return "R"; } else if ((iCnChar >= 51446) && (iCnChar <= 52217)) { return "S"; } else if ((iCnChar >= 52218) && (iCnChar <= 52697)) { return "T"; } else if ((iCnChar >= 52698) && (iCnChar <= 52979)) { return "W"; } else if ((iCnChar >= 52980) && (iCnChar <= 53640)) { return "X"; } else if ((iCnChar >= 53689) && (iCnChar <= 54480)) { return "Y"; } else if ((iCnChar >= 54481) && (iCnChar <= 55289)) { return "Z"; } else return ("#"); }}
5.測試程式,將模擬器中的鍵盤勾選上中文IME,如
6.輸入一些文字後,點擊GET就可以得到漢字的首字母了
你可以在這裡找到本篇文章的原始碼