最近在我的项目中用到汉字转拼音的需要,用的是 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。

就酱啦!