2015-11-26 5 views
0

Это tx.sqlКак исправить UnicodeDecodeError: 'utf8' декодированием байт 0xc0 чтения в SQL файле

DECLARE @Cnt INT, 
    @ParticipantID UNIQUEIDENTIFIER 

SELECT ParticipantID INTO #ids 
FROM dbo.rbd_Participants 
/* sun */ 
WHERE surname='Пупкин' 

Это Python скрипт

with open('tx.sql', 'r') as f: 
    script = f.read().decode('utf8') 
script = re.sub(r'\/\*.*?\*\/', '', script, flags=re.DOTALL)multiline comment 
script = re.sub(r'--.*$', '', script, flags=re.MULTILINE) line comment 

sql = [] 
do_execute = False 
for line in script.split(u'\n'): 
    line = line.strip() 
    if not line: 
     continue 
    elif line.upper() == u'GO': 
     do_execute = True 

    else: 
     sql.append(line) 
     do_execute = line.endswith(u';') 
     #print line 


cur.execute(u'\n'.join(sql).encode('utf8')) 

Проблема линия: script = f.read().decode('utf8')

UnicodeDecodeError: 'utf8' codec can't decode byte 0xc0 in position 134: invalid start byte

Я пробовал

script = f.read().decode('cp1251') 

но линия

cur.execute(u'\n'.join(sql).encode('utf8')) 
print (u'\n'.join(sql)).encode('utf8') 
DECLARE @Cnt INT, 
@ParticipantID UNIQUEIDENTIFIER 
SELECT ParticipantID INTO #ids 
FROM dbo.rbd_Participants 
WHERE surname='РџСѓРїРєРёРЅ' 

Как сделать правильную линию?

WHERE surname='РџСѓРїРєРёРЅ'

Там должна быть строка

WHERE surname='Пупкин'

ответ

2

Вы правильно читает данные. Это ваша печать утверждение, что неверно:

print (u'\n'.join(sql)).encode('utf8') 

Ваш терминал или консоль не поддерживает UTF-8, поэтому он показывает вам неправильные данные. Не кодируйте, оставьте это на Python.

+0

Спасибо за помощь. – voice