vCardは、連絡先情報を共有するための文字列表現形式(およびそのテキストフォーマット)の一種。 スマートフォンからPDAまで幅広い端末が対応しているが、それゆえに表記揺れや独自規格も多く、 データの移行、特にOSをまたぐような移行においては問題が発生することがある。
vCard形式のファイルには .vcf
という拡張子が付くことが多い (以降vcfファイルと呼称する)。
vcfファイルには複数のvCardデータを含めることができる。つまり、複数人の連絡先をひとつのvcfファイルに格納することが可能。
vCardフォーマットには「バージョン」の概念がある。これは各vCardごとに定義することができ、 単一vcfファイル中で複数バージョンのvCardが共存していても問題はない。
現時点では 2.1
, 3.0
, 4.0
の三種類を確認している。
バージョン4.0
ではvCard内にバージョン情報を必ず埋め込まなければならないと規定されている。
バージョン間の違いは主に文字列のエンコーディングである。バージョン2.1
ではquoted-printable
しか許容されていない(実装が多い)が、
3.0
, 4.0
ではutf-8
等の現在一般的なエンコーディングで情報を直接記述することができる。
vCardの使用はRFC6350に定義されている。 (日本語訳版も存在する)
vCardのフォーマットを以下に示す。
vCard
│
├── group
│ ├── property
│ │ ├── value
│ │ ├── parameter
│ │ └── parameter
│ └── property
│ ├── value
│ ├── parameter
│ └── parameter
├── property
│ ├── value
│ ├── parameter
│ └── parameter
└── property
└── value
vCardは複数のproperty
を持ち、property
は一つのvalue
および複数のpatameter
を持つ。
property
はvCardの持つ情報 (フルネーム、メールアドレス、電話番号など) を扱い、
parameter
はその詳細 (メールアドレスの種類や、電話番号が携帯のものか固定電話のものなのか など) を扱う。
property
は複数まとめてgroup
として扱われることもある。
バージョン3.0のvCardを一つ格納したvcfファイルのフォーマットを以下に示す。
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//iPhone OS //EN
FN:鈴木 一朗
X-PHONETIC-FIRST-NAME: イチロウ
X-PHONETIC-LAST-NAME: スズキ
item1.EMAIL;type=INTERNET;type=pref: ichirou@example.com
item1.X-ABLabel: 携帯
item2.EMAIL;type=INTERNET: mariners_ichirou@example.com
item2.X-ABLabel: Seattle Mariners
TEL;type=CELL;type=VOICE;type=PREF:000 0000 0000
item4.URL;type=pref: https://example.com
item4.X-ABLabel: homepage
BDAY:1973-10-22
N:鈴木;一朗;;;
END:VCARD
各プロパティの詳細はここでは省略する。ここでは概要として
BEGIN:VCARD
で始まり、
(プロパティグループ名).(プロパティ名);(パラメータ名)=(値): (プロパティ値)
という形式でフォーマットが列挙され、
END:VCARD
で終わるということを示しておく。
vCard 3.0
以降(要検証)では複数のプロパティを「グループ化」することができる。
グループ化することで単一のプロパティ同士に関連を持たせることができるため、パラメータでは示しきれない情報を付加する等の用途を想定していると思われる。
筆者が確認した限りでは、 icloud連絡先をエクスポートすると 「メールアドレスの種別」を付加するための手段としてグループ化が用いられていた:
item1.EMAIL;type=INTERNET: 00001@example.com
item1.X-ABLabel:_$!<School>!$_
この場合、グループ"item1"は
INTERNET
用のメールアドレス00001@example.com
- メールアドレスの
X-ABLabel
(Address-Book Label?) は_$!<School>!$_
という二つのプロパティを包括して持っていることになる。
_$!<School>!$_
はicloud連絡先上では 学校
と置き換わる(ロケールを想定している?)。
ほとんどのプロパティはバージョンを跨いで利用できるが、アプリケーション側ではその限りではない。
例えばAndroidの「連絡先」からデータをエクスポートするとvCard 2.1
形式のvcfファイルが出力されるが、
icloud連絡先はvCard 3.0
以前には対応していない。そのため、単純にvcfファイルを移動するだけでは移行できない。
どうやらvCard 3.0
ではquoted-printable
に対応していないようで、
- 移行元のバージョンを
v2.1
からv3.0
に変更 quoted-printable
でエンコードされた非ASCII文字をUTF-8等でデコードし、CHARSET
パラメータにUTF-8
を含めて元のプロパティに付加する
という処置が必要になる。