NPinyin 不支持中英混合转换,怎么破

最近在项目中用到汉字转拼音的需求,用的是 NPinyin 来实现的,但是在使用的过程中出现了与预期不符的情况。

我们先来看看正常使用:

string str = NPinyin.Pinyin.GetPinyin("小黄本黄");
Console.WriteLine(str);

输出为

xiao huang ben huang

显然,这是符合预期的,但如果我们在调用这个转换方法前,不知道当前字符串是中文还是拼音,那我们预期是不是会期望对拼音部分不做改变呢?但实际上不是的:

string str = NPinyin.Pinyin.GetPinyin("xiao huang ben huang");
Console.WriteLine(str);

输出为

x i a o h u a n g b e n h u a n g

它对每个英文字符也做了转换,导致每个字符后面多出了一个空格。

如果我们做以下调整,就可以返回我们预期的结果啦

public static string GetPinyin(string str)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i] > 127)
        {
            string pinyin = Pinyin.GetPinyin(str[i]);
            sb.Append(pinyin);
            // 如果是最后一位,就不用追加空格
            if (i == str.Length - 1)
                continue;
            // 如果不是最后一位,但下一位是符号,也不用追加空格
            if (char.IsPunctuation(str[i+1]))
                continue;
            sb.Append(" ");
            continue;
        }
        sb.Append(str[i]);
    }
    return sb.ToString();
}

我们测试一下

string str = GetPinyin("Xiao Huang 本黄。");
Console.WriteLine(str);

输出为

Xiao Huang ben huang。

就酱啦!

你可能感兴趣的:(c#汉语拼音)