Long Live Blog

我正在使用哈工大博客服务,在这里记录我的工作和生活。

导航

« 随便写写用QBasic写了个《最炫民族风》 »

解决手机名片转移过程中的姓名反置问题

废话不多说,先贴代码:


粘出来以后存成vbs文件,然后把要修改的vcf拖到那个vbs文件上面。

以下为正文:
=====================================
最近把HD Mini弄成安卓了,终于不用忍受WM系统的弱智电话本了,撒花~
WM的电话本太弱智了,一个联系人只允许存一个手机+一个固定电话+一个工作电话+一个电子邮箱+一个xxx+一个xxx+...反正什么都只能一个,之前我已经发过牢骚了,这个是微软当时就这么设计的,没办法。
后来换成安卓,情况终于改善了,现在有可能把原来老手机里面的电话本都导出来了,一个人终于可以有多个电话号码了。

可是批量导出后,麻烦来了:我是个有细节强迫症的人,原先电话本里面所有人名都是按姓+名存储的,比如:

姓:韩
名:梅梅
手机:13xxxxxxxxx
办公电话:0xx xxxxxxxx
住宅电话:0xx xxxxxxxx


姓:Green
名:Jim
手机:13xxxxxxxxx
办公电话:0xx xxxxxxxx
住宅电话:0xx xxxxxxxx


好处嘛,还是有的,比如方便按姓氏检索,这样像西门、欧阳之类的复姓不会出bug(几乎遇不到);另外,批量发送邀请函之类的时候,写韩梅梅女士,我觉得不如写韩女士来的正式(几乎也用不到)。除此之外,我几乎想不出来这么存名片的好处了(好吧,我说过我是细节强迫症了,明知道没用,还会给自己带来麻烦,但依旧这样存)。

原来的老塞班会自动根据姓名是中文还是英文来判断显示方式,两个名片会分别显示成韩梅梅(姓+名)和Jim Green(名+姓),可是传到安卓以后,两个名片都显示成了是这样的:梅梅 韩,Jim Green,英文的勉强算它蒙对了,但是咱们有几个英文名片啊,所有中文名片都姓名倒置了。这个是我完全不可以接受的。

解决起来很简单,只要编辑一下姓名的显示方式就好了,不过需要一个一个的改,我有400+的名片,天呐...放狗搜了一下,貌似很多人也都在抱怨这个问题,也没个什么特别完善的解决方案,看来只能自己动手了。

写脚本放到手机里面批量的去改电话本,呃,貌似我暂时没这个功力...只能去从中间环节做文章了。

于是,研究了一下各种名片传递的途径,包括Gmail、Outlook、各种云端电话本(这个想法试都没试就被我毙掉了,理由很简单,需要服务器中转,鬼知道别人会不会把你的电话本卖掉,这可都是干巴巴的有效数据啊),貌似无它了。而前面两种,说开了,都是用vcf格式来传递的,所以就打算从这里入手了。

放狗搜了下,这个协议还是很容易看懂的,顺带还回忆了一下这个名字是什么时候第一次见面的(vcf里面有名片创建时间)。
每一行冒号前为该值的描述,格式为 大类;小类;冒号后为值,格式依旧是 值1;值2;值3;值4;值5,等等。

当初设计vcf格式的时候也预留了不错的扩展性,比如嵌入联系人头像、铃声什么的,因为可以嵌入任何二进制数据,理论讲可以在里面嵌入任何类型的文件。

一个典型的vcf结构如下:

BEGIN:VCARD                                            头,用来表示是名片类型
VERSION:2.1                                            版本号
REV:20100316T183034Z                                   创建时间
UID:146d02f400136bea-00e15fa8df80f4d4-256              随即产生的一个联系人唯一标识
N;ENCODING=编码方式;CHARSET=字符集:姓;名1;名2;名3;名4
TEL;CELL:13936180336                                   电话,类型
EMAIL;INTERNET:xxxx@xxx.com
NOTE:QQ:xxxxxxxx
END:VCARD


vcf能看懂了,当时第一个想法就是直接调换姓和名的位置,不过这么做感觉有点对不起人家的老祖宗,而且看着本来应该显示为“韩梅梅”的显示成“韩 梅梅”,多了一个空格感觉依旧不爽,而且打电话快速搜索的时候也会出问题。这么干不行,应该还有别的办法。

于是导出了一个调整后的名片,和原来的做对比,发现多了一行,

FN;ENCODING=编码方式;CHARSET=字符集:韩梅梅

很好,只要想办法在每个名片里面生成这么一行,问题应该就能解决了。

于是动手写了上面的一小段代码。

对了,上述脚本还会自动给所有不带+86开头的手机号加上+86字样。以前所有电话都没存,因为我觉得那部分信息没有用。后来存了几个国际长途发现这个国家代码去掉以后多多少少有一点点不方便(好吧,我承认,HTC会自作多情的把类似13333333333的电话号码分割成1-33-33333-33这样的格式,严重干扰我思路),于是我又批量加上了。

VBScript真是个好东西啊,在不需要任何编译器的情况下就能让电脑去自动的做重复的事情,Hoho~拿来就能用,一个记事本就搞定了。看来微软还是给自己留了很多东西的。

脚本里面考虑了有些名片里面已经有FN那一行了,如果发现,则该名片不被处理。最后会生成一个”源文件名_out.vcf”的新联系人文件,只要把这个文件导入手机,问题就解决了。脚本里面没有考虑外国人姓名的显示方式,也没有考虑异常,因为假设名片都是从手机里面导出的,非人为加工,格式都是正确的。

希望能被搜索引擎抓走,并帮助有需要的人。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Recent Comments

Recent Article

Powered By Z-Blog 1.8 Arwen Build 90619

Copyright;2009-2009 blog.hit.edu.cn All Rights Reserved 哈工大网络与信息中心