C# 读取 vCard 格式
办公室里有时忙起来,会频繁进入这样一个循环,想找某个人的电话-去找名片-找不到名片-去查看手机-手机按解锁开关-手机滑屏/指纹/密码/图形解锁-手机按通话按键-输入那个人姓名的部分-找到电话-输入到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 格式的更多相关文章
- 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容
<?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- hadoop用mutipleInputs实现map读取不同格式的文件
mapmap读取不同格式的文件这个问题一直就有,之前的读取方式是在map里获取文件的名称,依照名称不同分不同的方式读取,比如以下的方式 //取文件名 InputSplit inputSplit = c ...
- Excel 转 vCard格式、CSV格式
Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...
- libxl 的使用,读取时间格式
最近开发使用到 libxl,用的是3.8.0 破解版. 具体过程: 1.将lib.dll放在exe同目录下,在代码中引用 libxl.lib #pragma comment(lib, ".\ ...
- 读取siftgeo格式文件的matlab程序
% This function reads a siftgeo binary file %读取siftgeo格式的二进制文件 % % Usage: [v, meta] = siftgeo_read ( ...
- 读取Cert格式证书的密钥
不想存储Cert证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import sun.misc.BASE64Enc ...
- 读取P12格式证书的密钥
不想存储p12证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import org.apache.commons. ...
- c# 用OpenXmL读取.xlsx格式的Excel文件 返回DataTable
1.须要引用的dll : DocumentFormat.OpenXml.dll ---须要安装一下OpenXml再引用 WindowsBase ---直接在项目里加入引用 2.方法: /// & ...
随机推荐
- 堆C数组实现
堆栈是一个最后出来该数据结构. 栈的基本操作包含:入栈,出栈,初始化栈,清空栈,遍历栈. C代码例如以下: #include <stdio.h> #define MaxSize 20 ty ...
- ReactJs入门思路
ReactJs入门思路小指南 原文 http://segmentfault.com/blog/fakefish/1190000002449277 React是怎么搞的? React中,把一切东西都看 ...
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(一)
对li标签的相关操作——点击li标签进行样式切换的两种方式 Demo演示: 1 2 3 4 // 详解: 第一种方式(以ul为基础): $("ul").bind("cli ...
- 【转】Appium基于安卓的各种FindElement的控件定位方法实践
原文地址:http://blog.csdn.net/zhubaitian/article/details/39754041#t11 AppiumDriver的各种findElement方法的尝试,尝试 ...
- 浅谈 js 数字格式类型
原文:浅谈 js 数字格式类型 很多人也许只知道 ,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是 ...
- Swift语言指南(五)--数字字面量和数字类型转换
原文:Swift语言指南(五)--数字字面量和数字类型转换 数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 ...
- 记录近期小改Apriori至MapReduce上的心得
·背景 前一阵,一直在研究一些ML的东东,后来工作关系暂停了一阵.现在继续把剩下一些热门的算法再吃吃透,"无聊+逗比"地把他们搞到MapReduce上.这次选择的入手对象为Apri ...
- java环境变量配置四种方法
原文:java环境变量配置四种方法 Java编程首要工作就是安装JDK(Java Development Kit).一通“NEXT”点完安装后就是最重要的环境变量设置了.也许有人会问为什么要设置环境变 ...
- SQL 无限级分类语句
原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...
- a链接bug
<a href=”javascript:void(0);” class="btn" id="btn"></a> 在ios系统中(andr ...