Проблемы с кодированием в python x64 - PullRequest
0 голосов
/ 11 ноября 2010

Я пытаюсь написать небольшой скрипт для записи таблицы 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 Ответ

1 голос
/ 12 ноября 2010

(ноль). пожалуйста, переформатируйте ваш код

  1. после for line in file: сделать что-то вроде line = line.decode('encoding-of-the-file'), с кодировкой, похожей на utf-8, или iso-8859-1 - , вы должны знать входную кодировку

    Если вы не знаете кодировку или не заботитесь о правильном декодировании, вы можете угадать наиболее вероятную кодировку и выполнить line.decode('uft-8', 'ignore'), пропуская все символы, которые невозможно декодировать. Также вы можете использовать 'replace', который заменяет эти символы на «Символ замены Юникода» (\ ufffd)

  2. использовать внутри и во время связи с базой данных только unicode объекты, например, u'this is unicode'

(3). Не используйте file в качестве имени переменной

также смотрите здесь: Рекомендации для Python UnicodeDecodeError

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...