Welcome, guest | Sign In | My Account | Store | Cart
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."

History