元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。

3GケータイからiPhoneに連絡先をコピーしたメモ

今月で3Gケータイが終了するのでiPhoneに機種変更しました。

が、

連絡先をiPhoneに自力でコピーするのがめんどくさかったのでメモを残します。

準備

microSDカードとリーダー、またはbluethooth対応のパソコン。

3GケータイからvCardファイルを回収るためにつかいます。

手順

vCardの作成

3Gケータイは連絡先を本体やSDカードにvCard形式で保存できます。3Gケータイを操作して、本体メモリまたはSDカードにすべての連絡先を保存します。

vCardをパソコンに取り込み

取り込む方法は3通りあります。

  1. SDカード - SDカードをパソコンに接続してファイルを読み出しましょう。なんとか.vcfというファイルがそれです。
  2. USB接続 - ケータイとパソコンをUSBで接続して読み出せる場合はそれで読み出します。
  3. bluethooth - bluethoothのファイル転送を使ってパソコンにファイルを取り込みます。Windowsとケータイをペアリングしてからファイルを送信します。

ファイルの中身を確認

vCardファイルはテキストファイルなので、メモ帳などで開くと中身が見えます。文字コードが変換されたりするので、開いた後に編集して上書き保存しないようにしてください。

形式の変換

さて、あとはiCloud.comにログインしvCardファイルをインポートすれば終了のはずでしたが、取り出したvCardファイルをそのままiCloudに追加すると激しく文字化けします。

簡単な変換処理をしないといけません。

変換処理

3GケータイのvCard文字コードはShift-jis、iCloudが読める文字コードUTF-8なのでその変換をします。また、パラメータの値も3GケータイとiPhoneで微妙に違うようなので形式を合わせます。

概ねこんな感じで変換をします。

3Gケータイの形式

BEGIN:VCARD
VERSION:3.0
N;CHARSET=SHIFT_JIS:山田太郎;;;;
FN;CHARSET=SHIFT_JIS:山田太郎
SORT-STRING;CHARSET=SHIFT_JIS:山田太郎
TEL;TYPE=PREF,CELL:0123456789
CLASS:PUBLIC
REV:2000-01-01T00:00:00Z
X-REDUCTION:70
X-GNO:0
X-GN;CHARSET=SHIFT_JIS:グループ設定なし
END:VCARD
:

iPhoneで読める形式

VERSION:3.0
N:山田太郎;;;;
FN:山田太郎
TEL;type=PREF;type=CELL:0123456789
REV:2000-01-01T00:00:00Z
END:VCARD
:

Pythonで書くとこのようなコードになります。

import re
def filter(s):
    a=s.split(":")
    #LeftのCHARSETを削除
    p=a[0].split(";")
    if len(p)>1 and re.match("^CHARSET=.+",p[1]):
        a[0]=p[0]
    #LeftのTELの整形
    if len(p)>1 and p[0]=="TEL":
        a[0]="TEL;"+";".join(["type="+i for i in [i.split("=")[-1] for i in p[1].split(",")]])
    #使えないタグは削除
    if a[0] in ["SORT-STRING","CLASS","X-REDUCTION","X-GNO","X-GN"]:
        return None
    if a[0]=="REV" and re.match("^[0-9]{8}T[0-9]{6}Z$",a[1]):
        a[1]="{0}-{1}-{2}T{3}:{4}:{5}Z".format(a[1][0:4],a[1][4:6],a[1][6:8],a[1][9:11],a[1][11:13],a[1][13:15])

    return a[0]+":"+a[1]

with open("3g.vcf",encoding='cp932') as f:
    with open("iphone.vcf",mode="w",encoding='utf-8') as f2:
        f2.writelines([i+"\n" for i in [filter(i) for i in [j.rstrip("\n") for j in f.readlines()]] if i is not None])

3g.vcfファイルから、iphone.vcfファイルが作られます。

iCloud.comにインポート

iCloud.comにログインして、連絡先にiphone.vcfを取り込みます。取り込みが成功すると、自動的にiPhoneと同期されます。

なお、この操作で連絡先の内容が壊れても責任は負えませんので、心配な方は有人店舗で実施されている有償のサービスをご利用ください。