using System;
using System.Collections.Generic;
using System.Text;
namespace NPinyin
{
public static class Pinyin
{
///
/// 取中文文本的拼音首字母
///
/// 编码为UTF8的文本
/// 返回中文对应的拼音首字母
public static string GetInitials(string text)
{
text = text.Trim();
StringBuilder chars = new StringBuilder();
for (var i = 0; i < text.Length; ++i)
{
string py = GetPinyin(text[i]);
if (py != "") chars.Append(py[0]);
}
return chars.ToString().ToUpper();
}
///
/// 取中文文本的拼音首字母
///
/// 文本
/// 源文本的编码
/// 返回encoding编码类型中文对应的拼音首字母
public static string GetInitials(string text, Encoding encoding)
{
string temp = ConvertEncoding(text, encoding, Encoding.UTF8);
return ConvertEncoding(GetInitials(temp), Encoding.UTF8, encoding);
}
///
/// 取中文文本的拼音
///
/// 编码为UTF8的文本
/// 返回中文文本的拼音
public static string GetPinyin(string text)
{
StringBuilder sbPinyin = new StringBuilder();
for (var i = 0; i < text.Length; ++i)
{
string py = GetPinyin(text[i]);
if (py != "") sbPinyin.Append(py);
sbPinyin.Append(" ");
}
return sbPinyin.ToString().Trim();
}
///
/// 取中文文本的拼音
///
/// 编码为UTF8的文本
/// 源文本的编码
/// 返回encoding编码类型的中文文本的拼音
public static string GetPinyin(string text, Encoding encoding)
{
string temp = ConvertEncoding(text.Trim(), encoding, Encoding.UTF8);
return ConvertEncoding(GetPinyin(temp), Encoding.UTF8, encoding);
}
///
/// 取和拼音相同的汉字列表
///
/// 编码为UTF8的拼音
/// 取拼音相同的汉字列表,如拼音“ai”将会返回“唉爱……”等
public static string GetChineseText(string pinyin)
{
string key = pinyin.Trim().ToLower();
foreach (string str in PyCode.codes)
{
if (str.StartsWith(key + " ") || str.StartsWith(key + ":"))
return str.Substring(7);
}
return "";
}
///
/// 取和拼音相同的汉字列表,编码同参数encoding
///
/// 编码为encoding的拼音
/// 编码
/// 返回编码为encoding的拼音为pinyin的汉字列表,如拼音“ai”将会返回“唉爱……”等
public static string GetChineseText(string pinyin, Encoding encoding)
{
string text = ConvertEncoding(pinyin, encoding, Encoding.UTF8);
return ConvertEncoding(GetChineseText(text), Encoding.UTF8, encoding);
}
///
/// 返回单个字符的汉字拼音
///
/// 编码为UTF8的中文字符
/// ch对应的拼音
public static string GetPinyin(char ch)
{
short hash = GetHashIndex(ch);
for (var i = 0; i < PyHash.hashes[hash].Length; ++i)
{
short index = PyHash.hashes[hash][i];
var pos = PyCode.codes[index].IndexOf(ch, 7);
if (pos != -1)
return PyCode.codes[index].Substring(0, 6).Trim();
}
return ch.ToString();
}
///
/// 返回单个字符的汉字拼音
///
/// 编码为encoding的中文字符
/// 编码为encoding的ch对应的拼音
public static string GetPinyin(char ch, Encoding encoding)
{
ch = ConvertEncoding(ch.ToString(), encoding, Encoding.UTF8)[0];
return ConvertEncoding(GetPinyin(ch), Encoding.UTF8, encoding);
}
///
/// 转换编码
///
/// 文本
/// 源编码
/// 目标编码
/// 目标编码文本
public static string ConvertEncoding(string text, Encoding srcEncoding, Encoding dstEncoding)
{
byte[] srcBytes = srcEncoding.GetBytes(text);
byte[] dstBytes = Encoding.Convert(srcEncoding, dstEncoding, srcBytes);
return dstEncoding.GetString(dstBytes);
}
///
/// 取文本索引值
///
/// 字符
/// 文本索引值
private static short GetHashIndex(char ch)
{
return (short)((uint)ch % PyCode.codes.Length);
}
}
}