办公室里有时忙起来,会频繁进入这样一个循环,想找某个人的电话-去找名片-找不到名片-去查看手机-手机按解锁开关-手机滑屏/指纹/密码/图形解锁-手机按通话按键-输入那个人姓名的部分-找到电话-输入到PC中的QQ-发送给某某-手机锁屏-喘口大气...

更要命的,有的时候短时间内这个循环会频繁被循环调用,我了个去,我就碰到过,于是那是就有了一个念头,如果能在PC显示器上有一个小输入框(就像当初的各家流氓一样),我输入“张三”,就能给我显示张三的电话,甚至是邮件地址、公司名称等多方便啊。有了这个念头心里就很鸡冻,因为其实这很容易做到,因为:

1. 数据就可以来自我们每台手机的通讯录的基础功能,导出联系人为 vCard 文件(*.vcf)

2. vCard文件其实就是有规定格式的文本文件

3. 对程序员而言简直是小菜一碟,对我这个普通爱好者来说,也只不过是费点事儿研究一下格式而已,如果仅仅是读取电话甚至更简单。

但是...这种需求毕竟是暂时的、随机性很强,过了需要它的时候就显得不那么迫切了,过了一段时间突然又想起来,闲来无事就先简单研究一下 vCard 吧,没什么技术含量,只为给自己做个笔记。

首先,vCard 文件的读取用 UTF-8 就可以,因为它自身要么只包含数字和英文字符,其它字符被编码了,要么即便包括 UTF-8 应该也能正常读取。

第二,文本的每一“行”都代表了一个特定的项目内容,具体含义可以参照度娘或相关rtf档案。简单来说,vCard每一行都在说一件事,一个内容,如“TEL;CELL:137xxxxxx27”(不包含双引号)一看便知这一行说的是电话,电话号码是“137xxxxxx27”

第三,每一行都有规定好的分隔符把相关内容分开,分隔符是半角英文的

第四,英文冒号“:”就是一个分隔符,冒号以前的是项,是参数,是“这一行是什么内容”,冒号以后的是“具体数值”。如“TEL;CELL:137xxxxxx27”,冒号前面是“TEL;CELL”,意思是这一行内容说的是电话,是什么电话呢,是CELL类型的电话(手机),冒号后面就是具体内容,电话号码是“137xxxxxx27”

第五,英文分号“;”用来把属性/参数做区分和说明,比如“FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E9=99=88=E7=A3=8A”的这样一条信息。冒号前面是“FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE”,分号把它们分成了三部分分别是“FN”、“CHARSET=UTF-8”、“ENCODING=QUOTED-PRINTABLE”,意思依次是“这一行的内容是FN”(rtf规定标记),“编码方式是UTF-8”,“被写在文件里的编码方式是QUOTED-PRINTABLE”。在这里多解释一下后两种编码的含义,比如中文姓名“张三丰”,用UTF-8编码方式变成了byte[],比如是{136,213,67,88,100,247},再用“QUOTED-PRINTABLE”编码方式把byte[]变成了“:=E9=99=88=E7=A3=8A”保存在vCard文件里,这就是参数中两种编码各自的作用。(注:手机程序是不是这么做的我不清楚,但我反向读取反正是成功了)

C# 读取 vCard 格式的更多相关文章

  1. 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容

    <?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...

  2. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  3. hadoop用mutipleInputs实现map读取不同格式的文件

    mapmap读取不同格式的文件这个问题一直就有,之前的读取方式是在map里获取文件的名称,依照名称不同分不同的方式读取,比如以下的方式 //取文件名 InputSplit inputSplit = c ...

  4. Excel 转 vCard格式、CSV格式

    Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...

  5. libxl 的使用,读取时间格式

    最近开发使用到 libxl,用的是3.8.0 破解版. 具体过程: 1.将lib.dll放在exe同目录下,在代码中引用 libxl.lib #pragma comment(lib, ".\ ...

  6. 读取siftgeo格式文件的matlab程序

    % This function reads a siftgeo binary file %读取siftgeo格式的二进制文件 % % Usage: [v, meta] = siftgeo_read ( ...

  7. 读取Cert格式证书的密钥

    不想存储Cert证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import sun.misc.BASE64Enc ...

  8. 读取P12格式证书的密钥

    不想存储p12证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import org.apache.commons. ...

  9. c# 用OpenXmL读取.xlsx格式的Excel文件 返回DataTable

    1.须要引用的dll :  DocumentFormat.OpenXml.dll  ---须要安装一下OpenXml再引用 WindowsBase  ---直接在项目里加入引用 2.方法: /// & ...

随机推荐

  1. .Net 4.5中的HttpClient试用

    .Net 4.5中增加了一个新的System.Net.Http.HttpClient名字空间(在 System.Net.Http.dll 中),用于发送 HTTP 请求和接收 HTTP 响应. 基本操 ...

  2. crawler_爬虫_反爬虫策略

    关于反爬虫和恶意攻击的一些策略和思路   有时网站经常受到恶意spider攻击,疯狂抓取网站内容,对网站性能有较大影响. 下面我说说一些反恶意spider和spam的策略和思路. 1. 通过日志分析来 ...

  3. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  4. 使用SharePoint创建和定义自己的网站页面

    使用SharePoint创建和定义自己的网站页面 1. 打开SharePoint Designer 2010. 2. 点击网站页面导航. 3. 在功能区点击Web部件页面,新建Employee.axp ...

  5. CSS hack 如何区分所有IE浏览器和非IE浏览器

    网上方法很多,例如,测试后得出以下结论,多余的话不说了,直入主题: 1.所有的推理IE浏览器 正解:此写法仅仅被lE浏览器识别,非IE浏览器不识别. <!--[if IE]> <st ...

  6. HDU 4006 The kth great number AVL解

    提供动态更新数据.第实时QK大量的值什么? 使用AVL统计数据结构做,比较先进的数据结构的内容. 不知道给出的数据为准值是否有反复.下面的程序是因为我能够处理重复数据出现的情况下,. 了repeat的 ...

  7. 利用EntityFramework获得双色球数据库

    原文 利用EntityFramework获得双色球数据库 双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买.以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往 ...

  8. ArcGIS Runtime SDKs v10.2.4最新(Android、iOS、OSX和.NET)

    ArcGIS Runtime SDKs v10.2.4最新,它包含:Android.iOS.OS X和.NET四大平台,用户和开发人员可以登录Esri最新的SDK安装包.或者通过云盘下载(http:/ ...

  9. ionic入门之色彩、图标和边距和界面组件:列表

    色彩 ionic定义了九种前景/背景/边框的色彩样式,: 可以在任何元素上使用这些样式设置前景和背景颜色: <any class="positive-bg energized" ...

  10. JSR303 Bean Validation 技术规范特性概述

    概述 Bean Validation 规范 Bean 是 Java Bean 的缩写,在 Java 分层架构的实际应用中,从表示层到持久化层,每一层都需要对 Java Bean 进行业务符合性验证,如 ...