import sqlite3, StringIO, sys def buf2unicode(data): u = StringIO.StringIO() for i in xrange(0, len(data), 2): f = unichr(ord(data[i+1]) << 8 | ord(data[i+0])) u.write(f) return u.getvalue() def unicode2buf(data): assert(type(data) == unicode) ba = bytearray() for i in data: t = ord(i) b1 = 255 & (t >> 8) b0 = 255 & t ba.append(b0) ba.append(b1) return buffer(ba) def main(name): try: conn = sqlite3.connect(name) except: print name, "can't be opened." c = conn.cursor() try: r = c.execute('select * from ItemTable') except: print name, "is not a localstorage file." data = {} for key, val in r: if type(val) == unicode: data[key] = unicode2buf(val) for k in data: c.execute('update ItemTable set value=? where key=?', (data[k], k)) print "Updated", k conn.commit() c.close() if __name__ == '__main__': if len(sys.argv) > 1: main(sys.argv[1]) else: print "Usage: %s target_filename" % sys.argv[0] print "target file will be modified. Please make backups."