今月で3Gケータイが終了するのでiPhoneに機種変更しました。
が、
連絡先をiPhoneに自力でコピーするのがめんどくさかったのでメモを残します。
手順
vCardをパソコンに取り込み
取り込む方法は3通りあります。
- SDカード - SDカードをパソコンに接続してファイルを読み出しましょう。なんとか.vcfというファイルがそれです。
- USB接続 - ケータイとパソコンをUSBで接続して読み出せる場合はそれで読み出します。
- bluethooth - bluethoothのファイル転送を使ってパソコンにファイルを取り込みます。Windowsとケータイをペアリングしてからファイルを送信します。
形式の変換
さて、あとは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ファイルが作られます。