Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用C语言将拼音字符串转换成中文#_C#_Wpf_Cjk - Fatal编程技术网

C# 如何用C语言将拼音字符串转换成中文#

C# 如何用C语言将拼音字符串转换成中文#,c#,wpf,cjk,C#,Wpf,Cjk,我有一个触摸屏键盘在我的WPF应用程序,我想让用户写中文 我看到Windows中有一个输入法,可以用拼音写中文。它工作得很好,但我想为我的WPF应用程序定制它。(特别是候选人名单)。我没有找到这方面的任何文档 这个想法是,用户用虚拟键盘输入拼音,文本框旁边会有一个带有汉字的选择列表 你有什么建议来实现它吗?也许有一个库(不是微软的)可以做到这一点,在这种情况下,我不会使用MS的IME?不确定是否有任何OS(开源)软件包可用。然而,从理论上讲,建立这样的图书馆并不难。汉语中大约有1300个单音:声

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

我看到Windows中有一个输入法,可以用拼音写中文。它工作得很好,但我想为我的WPF应用程序定制它。(特别是候选人名单)。我没有找到这方面的任何文档

这个想法是,用户用虚拟键盘输入拼音,文本框旁边会有一个带有汉字的选择列表


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

不确定是否有任何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,在那里我定义了拼音和汉字之间的关系。在我的博客中,可以通过查看源代码或上下文菜单中的Inspect元素找到脚本。在我的博客中,这个脚本是用来将中文转换成拼音的,但这种关系可以作为参考

要添加智能拼音功能——显示拼音单词列表,可以通过以类似模式定义所有常用单词来实现:拼音:单词。

事实上,Microsoft在这方面有很好的组件/库,但它们隐藏在Visual Studio国际功能包中

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


(2017年10月26日更新。许多人已经在NuGet.org上发布了基于Microsoft代码的NuGet软件包,因此您也可以查看这些软件包。)

如果是基于触摸的输入,让他们通过“书写”输入字符不是更好吗在屏幕上,而不是使用拼音转换?触摸屏不是真正的反应,也不容易在小文本框中书写。这是一个医疗应用程序,因此医生有可能创建新的患者,并在通过他们的名字、名字等找到他们之后。这就是为什么不能实现您的解决方案。因此,您想要自定义候选列表的原因是自动完成患者姓名?我所知道的大多数程序实现这一点的方式是允许键入拼音(直接,而不是通过系统输入法),并基于此自动完成。这个问题比实现一个通用有效的输入法要容易得多——通用输入法必须处理所有字符,并且必须建议最有可能匹配最新的MS拼音输入法,甚至从互联网上自动更新最新的统计数据以改进预测,因此,作为一个简单的解决方法,你可以让他们用罗马字母(直接拼音)输入,建议用字符匹配名字,也可以让他们通过输入法输入,就像在普通的桌面操作系统上一样。当然,这不如在IME中提供自动完成功能,但它应该非常有用。谢谢你的建议。我想要自定义MS IME的候选列表的原因是为它提供与应用程序相同的主题。(该列表将显示在键盘旁边)。不仅有名字和姓氏,还有关于患者的评论。我认为用户最好能插入汉字而不是拼音。我可以使用ImmGetCandidateList函数获取列表,但我可以使用imm32.dll函数修改列表样式吗?谢谢Lex Li,我以前下载过该软件包,但我没有看到任何关于如何将拼音字符串转换为汉字的内容。我应该使用哪个函数?我应该更清楚地说明,您需要1.0 SR 1和2.0。1.0 SR1中的CHSPinyinConv.msi是用于拼音转换的。ChineseChar.GetChars(字符串拼音)可以作为您的起点。我认为最好提及整个名称空间,即
Microsoft.International.Converters.PinYinConverter
。另外,今天通过NuGet更容易获得:@YoavFeuerstein运行我粘贴的代码片段,了解“拼音”的确切格式,然后你就会知道
feng
确实无效,因此
null
是应该的。您应该使用
FENG1
或其他有效输入。@YoavFeuerstein我没有答案。您可以查看此程序集的源代码(及其资源文件)以获得更多见解。嗨,David,谢谢您的回答。你认为用户能用这个词汇表写出他们想要的任何东西吗?我指的是基本的东西,比如他们的姓,名,关于体检的评论。