提示:本文是根据个人理解来简单探讨通讯录VCard格式以及介绍可以如何来解析VCard,这些内容并不依赖特定语言的使用。
文章目录
- 前言
- 一、为什么需要通讯录VCard格式
- 二、尝试解析VCard格式
- 1.读后缀名为vcf的信息
- 2.VCard包含哪些元素
- 3.将非结构数据转为结构数据
- 三、部分VCard字段信息解读
- 1.Android VCard
- 2.iCloud VCard
- 总结
前言
最近业余在做一个Matlab通讯录App项目,感觉平时微信用多了,就很少关注到自己通讯录的日常维护,就正好利用这个项目来维护自己的通讯录。
随着时间的推移,自己接触到各行各业的人越来越多,这时候,在空闲之余梳理下自己的通讯录还是有必要的,不仅可以清楚哪些人对你是重要的,哪些人对你是不重要的,另外将这些人的公司、职称、微信号等常用信息填入自己通讯录,可以方便电话来电显示时迅速反应出来电者的身份。
开发过程中,我逐渐意识到,能否方便我导出的(表格)数据能够被手机直接读取,于是在网上看了一些资料,才逐步了解到有通讯录VCard这样一种格式。
本文并没有相关的代码示例,仅讨论我是如何理解VCard格式的,以及在开发时梳理的一些关于VCard格式的惯例(如Android和iCloud VCard字段认知),以上这些内容纯属从个人角度去探讨,并不是严谨的知识,但希望本文可以引发各位的小小思考。
一、为什么需要通讯录VCard格式
VCard(全称似乎是Versitcard,但无法肯定)格式是通讯录文件的导出格式,以.vcf作为后缀名,一般能用记事本直接打开,也能用Microsoft Outlook以个人名片的形式打开,但会出现乱码。VCard有其特定的格式规范,但其实没必要了解格式规范的所有细节,一种最直接的方式便是来做一次简单的“逆向工程”,将自己的安卓或苹果手机通讯录以VCard格式导出至本地电脑,进而反推出VCard格式的一些规范表达。
此时不妨可以思考:为什么需要有VCard格式?我们在开发通讯录App时,完全可以自己做个“数据规划师”,根据用户需求(用户通常是自己或是熟悉的人)合理设计(数据库)字段,那又何必需要另外花时间去学习VCard格式呢?
其实,通讯录VCard格式可理解为一类通用的协议或者类似于一种共享的模板。如果开发者A设计出的通讯录软件能够导出至开发者B设计出的通讯录软件,那么对开发者A而言,自然需要了解开发者B设计的通讯录软件的细节,可开发者A却不认识开发者B,那么该如何实现通讯录数据的共享,让开发者A和B的软件能够读取到合适的数据呢?
一种自然的方式是来设计出一个通用的模板,而这个模板又可以被所有的开发者认可并理解,于是开发者A就不必去理解开发者B设计的数据结构,只需要弄清楚两件事:(1)自己设计的数据能导出为通用模板;(2)模板数据能转换成自己设计的数据结构。最终,这个通用的模板能被所有开发者正确解读,成为了沟通的“桥梁”,而VCard格式正好承担了归属于通讯录文件的通用模板这一角色。
然而,VCard格式不是完美无暇的,因为VCard格式仅在形式上是抽象的,内容上暂时无法达成统一意见。这便引发了一个问题:从通讯录A导出的数据无法完全被通讯录B解读,即通讯录B只能解析出其中的部分数据,而部分信息会被忽略,这些信息有可能是关键的。其实,产生该问题的原因是通讯录A导出的通用模板在形式上能够被通讯录B理解,但某些内容无法被通讯录B考虑在内。
举个例子:共享单车是个好东西,如美团单车等。既然要想让单车被大众所接受,那么就得统一确定好单车的规格、型号、款式,比如黄色油漆、转铃、刹车装置、实心胎、坐垫等需要统一样式,这样才能便于