[2012.04.03] Windows Phone 上的汉语拼音以及多音字处理
最近和一个朋友合作一个来电归属和防火墙类应用(用了小部分NativeHack,都是那位朋友搞定的)。因为要读取本地联系人然后显示,为了便于分组显示。我没有使用Filter,而是直接获取全部联系人列表,然后去Map首字母。
这样执行起来效率很低,毕竟是托管代码。但是期间为了转换成拼音还是费了点事,不仅找了徐老湿博客,还翻看了很多编码方面的东西,最后总结,汉字编码其实和拼音没啥太大关系。徐老湿推荐了一个GB2312的Encoding,然后通过码表查出汉字的码来获取拼音首字母,总的来说这其实不是一个很科学的做法,因为GB2312的编码前部分地确实按拼音来,可是后面的编码就不是了。因此很多汉字还是没法查询出来,而且GB2312只有6k多个汉字,我觉得不是很靠谱。然后找到了微软之前提供的Visual Studio International Pack,不过那个是给.Net Framework 用的。Windows Phone上显然用不了,于是我小小的利用了下Reflector,然后提取资源文件(其实就是一个字典),修改移植到了Windows Phone平台。
测试了下,效率不是很高。调用系统api读取所有联系人,大概300个,然后每个联系人获取拼音首字母,总共耗时大概接近5秒。虽然平均下来似乎不慢,但是这个速度还是很令人郁闷的,于是我决定生成Local Database然后测试一次。
测试完毕,数据库查询一样的慢,我很奇怪,这简直太没道理了,准备优化下,做个单独查询拼音的出来。先放出代码吧,需要的请自由下载,转载自觉注明出处。很希望大家提供更高效的解决方案。