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.方法: /// & ...
随机推荐
- 第21章 策略模式(Strategy Pattern)
原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述: ...
- Controller和View的交互
Controller和View的交互 目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI ...
- shell变量赋值进阶
首先,要理解shell中变量的3种赋值情况: unset 例子. unset a 空字符串, null 例子. a='' 非空,即不是unset,并且不是空字符串 例子: a=1 or a=b等 然后 ...
- 虚拟机安装麒麟3.2时报unkown filesystem,you need to load the linux kernel first
工作的需要,安装在虚拟机上的麒麟3.2的64位版本号. 使用虚拟机VMware Workstation 9.0,依照常识目标DVD光盘文件的类型选择Other Linux 2.6.x Kernel 6 ...
- linux cat
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut [-bn] [file] 或 cut ...
- 关于Java中List对象的分页思想,按10个或者n个数对list进行分组
try { List<String> timelist = DateUtils.getDateListBySETime("2015-08-01", "2015 ...
- hibernate实体类型映射文件
1.通过写hibernate映射文件.实体类型转换为数据库中的表 据实体类型而写的. 实体类型User.java package cn.wwh.www.hibernate.dd.property; i ...
- OSG(OpenSceneGraphcow.osg)配置笔记
OpenSceneGraph是一款高性能的3D图形开发库.广泛应用在可视化仿真.游戏.虚拟现实.高端技术研发以及建模等领域.使用标准的C++和OpenGL编写而成,可以运行在Windows系列.OSX ...
- ArrayList/List 泛型集合
List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...
- 设置Cookie,登录记住用户登录信息,获取用户登录过得信息
function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Da ...