1、vCard格式
1)vCard2.1
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0;=E4=B8=89;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89 TEL;CELL:1-300-756-0001 END:VCARD BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9D=8E;=E5=9B=9B;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9D=8E=E5=9B=9B TEL;CELL:1-350-756-0001 END:VCARD
2)vCard3.0
BEGIN:VCARD N:张;;三;; FN:张三 TEL;CELL:139-020-12345 VERSION:3.0 UID:{12065907AB6A4B33BA359EF2A85458DF} REV:2019-01-23 16:13:34 END:VCARD BEGIN:VCARD N:;;李四;; FN:李四 TEL;HOME:123-4567 VERSION:3.0 UID:{3147AEDE309741CBA5A7906193358E14} REV:2019-01-23 16:13:34 END:VCARD BEGIN:VCARD N:姓氏;名字;中间名;名称前缀;名称后缀 FN:张三 TEL;CELL:139-020-12345 VERSION:3.0 UID:{12065907AB6A4B34BA359EF2A85459DF} REV:2021-02-21 11:24:04 END:VCARD
2、vCard 2.1转换成3.0
Python需要Python 3.7以上版本,代码如下,
import pdb def str_to_hex(str_to_chg): tmp_bytes = bytes(str_to_chg, encoding = 'utf-8') tmp_chars = [] for each_byte in tmp_bytes: tmp_chars.append( '=' + str(hex(int(each_byte))).replace('0x','').upper()) return ''.join(tmp_chars) fp = r'D:\Contact3.0.vcf' wfile = r'D:\Contact2.1.vcf' wf = open(wfile,'w',encoding='utf-8') try: with open(fp, 'r',encoding='utf-8') as file: all_content = file.readlines() ignore_lines = 0 #pdb.set_trace() for line in all_content: if line[0:2]=='N:': names = line[2:].replace('\n','').split(";") first_name = str_to_hex(names[2]) # 3.0's family-name at pos:2 middle_name = str_to_hex(names[0]) # 3.0's middle-name at pos:0 last_name = str_to_hex(names[1]) # 3.0's name at pos:1 prefix_name = str_to_hex(names[3]) # 3.0's to prefix of name at pos:3 subfix_name = str_to_hex(names[4]) # 3.0's subfix of name at pos:4 s = wf.write('N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:') s = wf.write(first_name + ';') s = wf.write(middle_name + ';') s = wf.write(last_name + ';') s = wf.write(prefix_name + ';') s = wf.write(subfix_name + '\n') elif line[0:3]=='FN:': names = line[3:] s = wf.write('FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:' + str_to_hex(names.replace('\n','')) + '\n') elif line.startswith('VERSION:'): s = wf.write('VERSION:2.1\n') elif line.startswith('UID:'): ignore_lines = ignore_lines + 1 #pass else: s = wf.write(line) ignore_lines = ignore_lines + 1 #pass except Exception as ext: print("err:", ext) wf.close()
注意:转换完成格式如导入不成功,则需要与之前导出的文件格式进行对比,可能需要调整一下。
3、vCard3.0转换成2.1
文档地址:https://github.com/jowave/vcard2to3
转换方法:
git clone https://github.com/jowave/vcard2to3.git cd vcard2to3 ./vcard2to3.py your_file.vcf