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' 是一致的。可能对于系统的联系人数据库的确是有这个限制。

  1. import contacts
  2. f = open("E:\contacts.txt")
  3. db = contacts.open(mode = 'c')
  4. n = 1
  5. count = 0
  6. for line in f:
  7.     count = count + 1
  8.     if n == 1:
  9.         n = 0
  10.         contact = db.add_contact()
  11.         title = line.split(", ")
  12.         #print title[0], title[1].decode('UTF-8')
  13.     else:
  14.         if line.strip() == "":
  15.             contact.commit()
  16.             n = 1
  17.         else:
  18.             info = line.split(", ", 1)
  19.             try:
  20.                 v = info[1].decode('UTF-8').strip()
  21.                 #print info[0], v
  22.                 contact.add_field(info[0], v)
  23.             except:
  24.                 print 'add_field', title[0]
  25.                 break
  26.  
  27. f.close()
Topic: 技术