/// <summary> /// 汉字转换为拼音 /// </summary> public static string ToPinYin(this string input) { if (string.IsNullOrWhiteSpace(input)) { return(string.Empty); } input = input.Trim(); var result = new StringBuilder();//使用StringBuilder优化字符串连接 char[] arrChar = input.ToCharArray(); for (int j = 0; j < arrChar.Length; j++) //遍历输入的字符 { byte[] arr = Encoding.Default.GetBytes(arrChar[j].ToString()); //根据系统默认编码得到字节码 if (arr.Length == 1) //如果只有1字节说明该字符不是汉字,结束本次循环 { result.Append(arrChar[j].ToString()); continue; } int arr1 = arr[0]; //取字节1 int arr2 = arr[1]; //取字节2 int charCode = arr1 * 256 + arr2 - 65536; //计算汉字的编码 if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变 { result.Append(arrChar[j]); } else { //根据汉字编码范围查找对应的拼音并保存到结果中 //由于charCode的键不一定存在,所以要找比他更小的键上一个键 if (!CodeCollections.ContainsKey(charCode)) { for (int i = charCode; i <= 0; --i) { if (CodeCollections.ContainsKey(i)) { result.Append(CodeCollections[i]); break; } } } else { result.Append(CodeCollections[charCode]); } } } return(result.ToString()); }
/// <summary> /// 汉字转拼音 /// </summary> /// <param name="txt"> 需要转换的汉字 </param> /// <returns> 返回汉字对应的拼音 </returns> public static string ToPinYin(string txt) { txt = txt.Trim(); byte[] arr = new byte[2]; //每个汉字为2字节 StringBuilder result = new StringBuilder(); //使用StringBuilder优化字符串连接 int charCode = 0; int arr1 = 0; int arr2 = 0; char[] arrChar = txt.ToCharArray(); for (int j = 0; j < arrChar.Length; j++) //遍历输入的字符 { arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString()); //根据系统默认编码得到字节码 if (arr.Length == 1) //如果只有1字节说明该字符不是汉字,结束本次循环 { result.Append(arrChar[j].ToString()); continue; } arr1 = (short)(arr[0]); //取字节1 arr2 = (short)(arr[1]); //取字节2 charCode = arr1 * 256 + arr2 - 65536; //计算汉字的编码 if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变 { result.Append(arrChar[j]); } else { //根据汉字编码范围查找对应的拼音并保存到结果中 //由于charCode的键不一定存在,所以要找比他更小的键上一个键 if (!CodeCollections.ContainsKey(charCode)) { for (int i = charCode; i <= 0; --i) { if (CodeCollections.ContainsKey(i)) { result.Append(" " + CodeCollections[i] + " "); break; } } } else { result.Append(" " + CodeCollections[charCode] + " "); } } } return(result.ToString()); }