如何在C#中将拼音字符串转换为中文

时间:2012-03-02 15:00:51

标签: c# wpf cjk

我的WPF应用程序中有一个触摸屏键盘,我想允许用户用中文写。

我看到Windows中有一个允许用拼音用中文写的IME。它工作得很好,但我想为我的WPF应用程序自定义它。 (特别是候选人名单)。我没有找到任何相关的文档。

用户可以使用虚拟键盘在拼音中书写,并且文本框旁边会有一个带有中文表意文字的选项列表。

您有什么建议可以实现吗?也许有一个库(不是来自微软)可以制作它,在这种情况下我不会使用MS的IME?

2 个答案:

答案 0 :(得分:3)

不确定是否有可用的OS(开源)软件包。但是,从理论上讲,构建这种库并不难。在中文中,大约有1300个单声道:初始+最终+音调。每个声音都有一组汉字,各种数字从1到130个字符。

您可以定义所有拼音的数组:

string[] pinyins = new string[] {
  "a:c1c2c3...",      // pinyin 1 a: character1 character2...
  ...
  "zuo:z1z2z3z4z5..." // last pinyin (1300) zuo: character character...
};

上面的数组是您拼音到中文的基础(汉字和拼音是unicode字符串)。然后对于每个拼音输入声音,通过如下函数获得字符列表:

string getCharacters(string aPinyin) {
   string characters = null;
   foreach(string item in pinyins) {
      string[] temp = item.split(':');
      if (temp[0].Equals(aPinyin)) {
          charaters = temp[1];
          break;
      }
   }
   return characters;
}

很久以前我写了一篇JavaScipt,在那里我定义了拼音和汉字之间的关系。在我的博客:Get Pinyin From Chinese Characters中,可以通过查看上下文菜单中的源代码或Inspect Element找到该脚本。在我的博客中,该脚本用于将中文转换为拼音,但该关系可以作为参考。

enter image description here

要添加智能拼音功能 - 显示拼音的单词列表,可以通过定义相似模式中的所有常用单词来完成:拼音:单词。

答案 1 :(得分:3)

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=7D1DF9CE-4AEE-467F-996E-BEC826C5DAA2

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15251

微软实际上有很好的组件/库,但它们隐藏在Visual Studio International Feature Pack中。

请注意,您需要1.0 SR 1提供基本库,而2.0需要添加许多WinForms或WPF控件。

(2017年10月26日更新。许多人根据微软的代码在NuGet.org上发布了NuGet包,所以你也可以检查这些包。)