【问题标题】:read vcf files containing persian name读取包含波斯名称的 vcf 文件
【发布时间】:2020-05-05 19:42:44
【问题描述】:

我想读取一个 VCF 文件,其中包含 UTF8 字符集中带有波斯字符的名称:

BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D8=B9=D9=84=D9=89=20=D9=85=D8=B1=D8=AD=D9=85=D8=AA=D9=89;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D8=B9=D9=84=D9=89=20=D9=85=D8=B1=D8=AD=D9=85=D8=AA=D9=89
TEL;CELL;PREF:123456789
END:VCARD

代码:

file = open('./contact.vcf', 'r', encoding="utf-8")
    contacts = []
    for line in file:
        name = re.findall('FN:(.*)', line)
        nm = ''.join(name)
        if len(nm) == 0:
            continue

        data = {'name': nm.strip()}
        for lin in file:
            tel = re.findall('TEL;CELL;?(?:PREF)?:(.*)', lin)
            tel = ''.join(tel)

            if len(tel) == 0:
                continue

            tel = tel.strip()
            tel = ''.join(e for e in tel if e.isalnum())
            data['phone'] = tel
            break

        contacts.append(data)

当涉及到波斯名字时,它是空的,它完成了中断 但是一定有更优雅的方式吗?谁能给我指出那个方向?

【问题讨论】:

    标签: python string python-3.7 vcf-vcard


    【解决方案1】:

    字符串类型是MIME 引用可打印数据

    要解码,可以使用quopri

    解码示例:

    import quopri
    
    name = '=D8=B9=D9=84=D9=89=20=D9=85=D8=B1=D8=AD=D9=85=D8=AA=D9=89'
    decoded_string = quopri.decodestring(name)
    print(decoded_string.decode('utf-8'))
    

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2011-12-22
      • 2014-05-16
      相关资源
      最近更新 更多