¿Qué es un Archivo VCF?
Un archivo VCF — formato vCard — es el formato estándar para almacenar e intercambiar información de contacto electrónica. Las siglas provienen del inglés Virtual Contact File (archivo de contacto virtual). Cada archivo VCF contiene uno o más registros de contacto codificados como texto plano, con líneas de propiedades estructuradas que definen nombre, número de teléfono, dirección de correo electrónico, dirección postal, foto y docenas de otros atributos de contacto.
El formato está definido por el IETF en el RFC 6350 (vCard 4.0), con versiones anteriores en el RFC 2426 (vCard 3.0) y la especificación original de 1996 (vCard 2.1). Los archivos VCF son la lengua franca universal para el intercambio de contactos: todas las aplicaciones principales — Contactos de Apple, Google Contacts, Microsoft Outlook, Thunderbird, LinkedIn — pueden importar y exportar VCF.
Estructura del Archivo vCard
Un archivo VCF es un archivo de texto UTF-8 (o ASCII para vCard 2.1) donde cada contacto está envuelto en un par BEGIN:VCARD / END:VCARD. Las propiedades usan la sintaxis NOMBRE-PROPIEDAD:valor, con parámetros opcionales en la forma NOMBRE-PROPIEDAD;PARAM=VALOR:valor.
Ejemplo Mínimo de vCard 4.0
BEGIN:VCARD
VERSION:4.0
FN:Ana Martínez
N:Martínez;Ana;;;
EMAIL;TYPE=work:ana.martinez@ejemplo.com
TEL;TYPE=cell:+34 612 345 678
END:VCARD
Ejemplo Completo de vCard 3.0
BEGIN:VCARD
VERSION:3.0
FN:Carlos Ramírez
N:Ramírez;Carlos;Eduardo;;
ORG:TechCorp S.L.
TITLE:Ingeniero Senior
EMAIL;TYPE=INTERNET,WORK:carlos@techcorp.es
EMAIL;TYPE=INTERNET,HOME:carlos.personal@gmail.com
TEL;TYPE=WORK,VOICE:+34 91 555 00 01
TEL;TYPE=CELL:+34 612 345 678
ADR;TYPE=WORK:;;Calle Mayor 42;Madrid;;28001;Spain
URL:https://www.carlos-ramirez.dev
BDAY:1988-04-15
NOTE:Conocido en PyConES 2023
REV:2024-01-10T14:00:00Z
END:VCARD
Diferencias Entre Versiones de vCard
Hay tres versiones de vCard en uso activo: 2.1, 3.0 y 4.0.
vCard 2.1
- La más antigua, con mayor compatibilidad (especialmente con teléfonos Nokia/feature phones)
- Datos binarios (fotos) codificados como
ENCODING=BASE64 - Codificación de texto:
ENCODING=QUOTED-PRINTABLEpara caracteres no ASCII - Todavía exportada por algunas aplicaciones Android y servidores Exchange corporativos
vCard 3.0 (RFC 2426)
- Codificación cambiada a
ENCODING=b(Base64) - Codificación de caracteres en UTF-8
- Añade las propiedades
CATEGORIESyNICKNAME - La versión más común en la práctica — Google Contacts exporta 3.0 por defecto
vCard 4.0 (RFC 6350)
- Unicode completo (UTF-8 obligatorio)
- Nuevas propiedades:
KIND,GENDER,LANG,ANNIVERSARY,RELATED PHOTOySOUNDahora usan URIs en lugar de Base64 en línea- Menos exportada por los clientes de correo (Outlook sigue usando 3.0 por defecto)
Referencia de Propiedades Comunes
| Propiedad | Descripción | Ejemplo |
|---|---|---|
FN |
Nombre formateado (display) | FN:Juan García |
N |
Nombre estructurado: Apellidos;Nombre;Segundo;Prefijo;Sufijo | N:García;Juan;M;; |
EMAIL |
Dirección de correo | EMAIL;TYPE=work:j@ejemplo.com |
TEL |
Número de teléfono | TEL;TYPE=cell:+34 600 000 000 |
ADR |
Dirección estructurada | ADR;TYPE=work:;;Calle Mayor 1;Madrid;;28001;ES |
ORG |
Organización | ORG:Empresa S.L. |
TITLE |
Cargo | TITLE:Director Técnico |
BDAY |
Cumpleaños (ISO 8601) | BDAY:1990-06-20 |
URL |
Sitio web | URL:https://ejemplo.com |
NOTE |
Nota de texto libre | NOTE:Conocido en congreso |
CATEGORIES |
Categorías/etiquetas | CATEGORIES:amigo,colega |
Exportar e Importar VCF
Google Contacts
Exportar: contacts.google.com → Seleccionar contactos → Exportar → vCard (para iOS) → Exportar Importar: contacts.google.com → Importar → Seleccionar archivo .vcf
Contactos de Apple (macOS/iOS)
Exportar (macOS): Seleccionar contacto(s) → Archivo → Exportar → Exportar vCard… Importar: Hacer doble clic en un archivo .vcf en Finder — Contactos se abre y solicita confirmación.
Microsoft Outlook
Exportar: Archivo → Abrir y exportar → Importar/Exportar → Exportar a un archivo → Archivo vCard (.vcf) Importar: Arrastrar un archivo .vcf a la carpeta Contactos en Outlook, o hacer doble clic.
Trabajar con VCF en Python
La biblioteca vobject es el paquete Python más utilizado para analizar y crear archivos vCard:
pip install vobject
Leer un Archivo VCF
import vobject
with open('contactos.vcf', 'r', encoding='utf-8') as f:
contenido = f.read()
for vcard in vobject.readComponents(contenido):
nombre = vcard.fn.value if hasattr(vcard, 'fn') else 'Desconocido'
emails = [e.value for e in vcard.contents.get('email', [])]
telefonos = [t.value for t in vcard.contents.get('tel', [])]
print(f"{nombre}: emails={emails}, teléfonos={telefonos}")
Crear un Archivo VCF Programáticamente
import vobject
def crear_vcard(nombre: str, apellidos: str, email: str, telefono: str) -> str:
"""Crea una cadena vCard 3.0 para un contacto."""
tarjeta = vobject.vCard()
tarjeta.add('fn').value = f"{nombre} {apellidos}"
n = tarjeta.add('n')
n.value = vobject.vcard.Name(family=apellidos, given=nombre)
e = tarjeta.add('email')
e.value = email
e.type_param = 'INTERNET'
t = tarjeta.add('tel')
t.value = telefono
t.type_param = 'CELL'
return tarjeta.serialize()
vcf_string = crear_vcard("María", "García", "maria@ejemplo.es", "+34 611 222 333")
print(vcf_string)
Convertir VCF a CSV
import vobject
import csv
def vcf_a_csv(ruta_vcf: str, ruta_csv: str) -> None:
"""Convierte contactos VCF a CSV para uso en hojas de cálculo."""
filas = []
with open(ruta_vcf, 'r', encoding='utf-8', errors='replace') as f:
for tarjeta in vobject.readComponents(f.read()):
fila = {
'nombre': tarjeta.fn.value if hasattr(tarjeta, 'fn') else '',
'email': tarjeta.email.value if hasattr(tarjeta, 'email') else '',
'telefono': tarjeta.tel.value if hasattr(tarjeta, 'tel') else '',
'empresa': tarjeta.org.value[0] if hasattr(tarjeta, 'org') else '',
}
filas.append(fila)
if filas:
with open(ruta_csv, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=filas[0].keys())
writer.writeheader()
writer.writerows(filas)
vcf_a_csv('contactos.vcf', 'contactos.csv')
Problemas Comunes con VCF y Soluciones
Problemas de codificación — Los archivos vCard 2.1 exportados por teléfonos Android antiguos suelen usar ENCODING=QUOTED-PRINTABLE para caracteres acentuados. Si los nombres aparecen como texto ilegible, abre el archivo en un editor de texto y comprueba si aparecen secuencias del tipo =C3=A1; esos son bytes UTF-8 en codificación QP. La biblioteca vobject los gestiona automáticamente.
Contactos duplicados tras la importación — Cuando el mismo VCF se importa dos veces, la mayoría de las aplicaciones crean duplicados porque hacen coincidencia por UID, y los archivos VCF creados manualmente a menudo carecen de UID. Google Contacts y iCloud ofrecen herramientas para fusionar duplicados después de la importación.
VCF multicontacto vs. contacto único — Gmail y Google Contacts esperan archivos VCF multicontacto (varios bloques BEGIN:VCARD…END:VCARD en un archivo). Outlook por arrastrar y soltar solo acepta archivos VCF de contacto único. Al mover contactos de Outlook a Google, exporta como un único VCF multicontacto mediante Importar/Exportar, no arrastrando archivos .vcf individuales.
VCF y Privacidad
Los archivos VCF pueden contener datos personales sustanciales: nombre, teléfono, email, dirección postal, fecha de nacimiento, foto, notas y anotaciones de relaciones. Al compartir archivos VCF, revisa qué campos están incluidos, elimina fotos y notas personales cuando compartas contactos profesionales, y ten precaución al importar archivos VCF de fuentes no confiables.
Conversiones relacionadas
Conversiones frecuentes del catálogo: