S60 导入地址本

已经入手 E61i !!!

地址本数据来自古老的 3650,格式见用 Python 备份 S60 的地址本

开发过程中碰到这么几个问题:

1. 第一次安装 1.3.x 高版本的 PyS60,一共需要两个 sis 包,分别是 PythonForS60_1_3_21_3rdEd_selfsigned.SIS 和 PythonScriptShell_1_3_21_3rdEd_selfsigned.SIS。一开始不知道还需要 PythonScriptShell,找了半天 python 图标,还以为自己弄错了。另外我一开始安装在卡上,程序无法执行,删除后安装到内存上就好了。

2. PyS60 的从 UTF-8 字符串 decode 成 unicode 有问题。单独的“张”这个字是无法 decode 的,但完整的名字或哪怕是“张\n”都可以正确 decode。还没有测试是不是单独的汉字都有这个 bug;反正是为了这个问题调试了半天。

3. 从文档所说,contacts.open(mode = 'n') 应该是创建一个全新的、空白的联系人数据库。实际上不是这样,效果和 mode = 'c' 是一致的。可能对于系统的联系人数据库的确是有这个限制。

import contacts
f = open("E:\contacts.txt")
db = contacts.open(mode = 'c')
n = 1
count = 0
for line in f:
    count = count + 1
    if n == 1:
        n = 0
        contact = db.add_contact()
        title = line.split(", ")
        #print title[0], title[1].decode('UTF-8')
    else:
        if line.strip() == "":
            contact.commit()
            n = 1
        else:
            info = line.split(", ", 1)
            try:
                v = info[1].decode('UTF-8').strip()
                #print info[0], v
                contact.add_field(info[0], v)
            except:
                print 'add_field', title[0]
                break

f.close()