汉字转为拼音是个讨论很久的问题了,我以前也一直有参与,不过没有写过。
最近我在自己的Code想使用这个功能,无奈本人天生懒惰,不想Mapping所有的汉字和拼音,就寻思着找个捷径——上网搜索!!!哈哈~~~~
网上比较流行的有两种方式:
1. 代码里面硬编码所有的汉字拼音和编码,在程序里面使用对照,找到拼音——这个和Mapping的思路一样,没有新意,而且硬编码对于本身的代码来说,是种负担啊,再说了,这个方法没有很好的解决多音字的问题,一个『了』可以发音:le,也可以发音liao,此时系统瘫了。
我比较喜欢干净简洁,可扩展性能比较好的东西,这个,被我PASS了(Copy人家代码还有这么多要求,我想我要被板砖、鸡蛋了=.=!!)
2. 第二种方法,自然就是Mapping出来了,这个网上也有很多版本,不过代码没什么好说,C++的居多,C#的一般都是在第一种方法里面困着(看来和我一样的懒人居多啊=.=!!)。既然是Mapping,写文件呗,这里有两个思路:
第一个死点,就是直接做个(汉字,拼音)的Key&Value的Mapping,这个方法缺点是——笨拙,每个字都要映射上,多音字还要多次(格式调整下也可以,比如:汉字 拼音1 拼音2),而且,系统快速查找会是个瓶颈,怎么看也看不起眼啊,不过有个好处是,可控性强,而且扩展也比较好,泛开讲,如果不是汉字对转,这个也可以用,呵呵,就是个Mapping机制而已。
当然,当前我要的是汉字转,所以想下第二个思路,用汉字编码来Mapping,这样Mapping出来有个好处,编码有序,可以在文件中,用偏移量快速定位,假设每个汉字分配一个固定大小的编码块,在文件中,用编码得出偏移量,可以快速的找到汉字编码块进行解析,当然,也可以想第一种方法那样,直接用编码+拼音的Mapping方式,日本有个叫Koichi Yasuoka的仁兄就是这种方式,在网上有个Unicode Pinyin table(我没有崇洋媚外的意思,我Google的时候,没发现国人有这玩意儿)
小结:粗略的分析了下,对我懒人来说,我更倾向于第二种,不过第二种也是有点麻烦,不过不失一种折中方案。
写到这里,应该可以打住了,然而,世界总是不断给出惊喜的,伟大的Searcher engine就是惊喜的创造者,G的时候,发现,竟然MS这家伙2009/3/31就发布了『Microsoft Visual Studio International Pack 1.0 SR1』,里面就赫然放着拼音转换的玩意儿。伤不起啊!
赶紧的,下载吧,这里是他的地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=44cac7f0-633b-477d-aed2-99aee642fc10 介绍分析之类,没有研究没有发言权,正准备研究下,先复制粘贴官方的吧
Visual Studio International Pack 包含一组类库,该类库扩展了.NET Framework对全球化软件开发的支持。使用该类库提供的类,.NET 开发人员可以更方便的创建支持多文化多语言的软件应用。 该软件包1.0版提供下面七个组件以增强.NET Framework对全球化软件应用开发的支持。
- East Asia Numeric Formatting Library - 支持将小写的数字字符串格式化成简体中文,繁体中文,日文和韩文的大写数字字符串。
- Japanese Kana Conversion Library - 支持将日文假名(Kana)转化为另一种日文字符。
- Japanese Text Alignment Library - 支持日文特有的一种对齐格式。
- Japanese Yomi Auto-Completion Library - 类库支持感知日文输入法的输入自动完成和一个文本框控件的示例。
- Korean Auto Complete TextBox Control - 支持韩文输入法的智能感知和输入自动完成的文本框控件。
- Simplified Chinese Pin-Yin Conversion Library - 支持获取简体中文字符的常用属性比如拼音,多音字,同音字,笔画数。
- Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool - 支持简繁体中文之间的转换。该组件还包含一个Visual Studio集成开发环境中的插件(Add-in)支持简繁体中文资源文件之间的转换。
发布的SR1中修正了 Japanese Kana Conversion Library 和 Japanese Yomi Auto-Completion Library 中的软件缺陷, 其他库中没有改动