办公室里有时忙起来,会频繁进入这样一个循环,想找某个人的电话-去找名片-找不到名片-去查看手机-手机按解锁开关-手机滑屏/指纹/密码/图形解锁-手机按通话按键-输入那个人姓名的部分-找到电话-输入到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. MyEclipse2014 设备 checkstyle、PMD、findbugs 最简单的方法 详细说明

    最近的实验需要的代码审查和应用程序性能优化.在需求MyEclipse安装某些插件,由于如今的MyEclipse版本号和大多数教程的不一样了,一些安装选项也已经改变,所以安装起来非常费事,通过不断的尝试 ...

  2. 词组缩写(isalpha()的应用)

    Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写.比如,C语言里常用的EOF就是end of file的缩写.   Input 输入的第一行是一个整数 ...

  3. oracle_体系结构图_逻辑结构图

    1.oracle 的体系结构图  重要!!! 2.oracle的逻辑结构图

  4. Java设计模式(三)原型模型 适配器型号

    (五岁以下儿童)原型模型 Prototype 样机模型旨在复制一个现有对象来创建新对象.而不是通过的方式的实例.原型模式须要实现 Cloneable 接口.覆写clone方法,复制分为浅复制.深复制. ...

  5. 解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序

    原文:[原创]解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序 我更换了新的电脑,操作系统也从原来32位的windows 2003 R2升级到windows 2 ...

  6. SSAS系列——【03】多维数据(多维数据集对象)

    原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube? 简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储 ...

  7. 多线程学习之五超时模式Timer

    timed[超时模式]案例:一个线程提供下载数据,另一个线程执行下载,如果有5秒钟以上,提供下载的线程没有提供数据,下载线程因超时异常,停止下载线程运行. 超时异常类 /** * */ package ...

  8. Linux server关闭自己主动

    公司linux server发生错误.mysql server没有理由关闭,我找不到理由.Version: '5.6.13-enterprise-commercial-advanced' socket ...

  9. 上海及周边地区产品技术创业QQ群:98905958

    创业是一件骄傲的事,每一个行业里最棒人才都应该创业或參与创业或以一个创业者的心态进行职业远景规划: 创业是一件寻常的事,跟上班打工一样寻常,没有什么必须的前置条件才干够開始,也没有什么前置条件能保证我 ...

  10. Premiere Pro CC问题集,不断更新

    1.Premiere Pro CC不好用? 是的.原因如下: 1.1 Adobe公司不注重用户体验,不注重工作流程,导致这款软件的用户体验很差,设计也很烂.对比Adobe公司当年用户体验最好的软件 F ...