python x64中的编码问题

时间:2010-11-11 20:15:30

标签: python sqlite encoding

我正在尝试编写一个小脚本,用于从保存在文件中的存档列表中写入sqlite表。到目前为止的代码是:

import os import _sqlite3 import sys

print sys.path[0] mydir = sys.path[0] print (mydir) def listdir(mydir):
    lis=[] 
    for root, dirs, files in os.walk(mydir):
         for name in files:
             lis.append(os.path.join(root,name))
    return lis
     filename = "list.txt" print ("writting in %s" % filename) file = open(filename, 'w' ) for i in listdir(mydir):
    file.write(i)
    file.write("\n") file.close()

con =
_sqlite3.connect("%s/conection"%mydir) c=con.cursor()

c.execute(''' drop table files ''') c.execute('create table files (name text, other text)') file = open(filename,'r') for line in file :
    a = 1
    for t in [("%s"%line, "%i"%a)]:
        c.execute('insert into files values(?,?)',t)
        a=a+1 c.execute('select * from files') print c.fetchall() con.commit() c.close()

当我跑步时,我得到以下内容:

Traceback (most recent call last):   File "C:\Users\josh\FORGE.py", line 32, in <module>
    c.execute('insert into files values(?,?)',t) ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

我已经尝试使用内置函数的unicode()但仍然无法工作,说他无法解码字符0xed或其他东西。

我知道问题在于列表字符串的编码,但我找不到一种方法来正确使用它们。有任何想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

(零)。请重新格式化您的代码

  1. for line in file:执行类似line = line.decode('encoding-of-the-file')的操作后,编码类似于utf-8iso-8859-1 - ,您必须知道输入编码

    如果您不知道编码或不关心干净解码,您可以猜测最可能的编码并执行line.decode('uft-8', 'ignore'),省略所有不可解码的字符。此外,您可以使用'replace',将这些字符替换为“Unicode替换字符”(\ ufffd)

  2. 在内部使用,并在与数据库 unicode对象进行通信时使用,例如u'this is unicode'

  3. (3)。不要将file用作变量名称

    另见:Best Practices for Python UnicodeDecodeError