Форум сайта python.su
0
Коллеги!
Подскажите, есть mssql сервер, в нем табличка в которую нужно писать текст сграбленный из интернета, всё бы хорошо, только в базу почему то пишет “Р РўРЎ-тендер”, если я пишу хоть
str=“UPDATE z SET area = ‘”+rez.encode(“UTF8”)+“’ WHERE purchaseNumber='”+str(nzak)+“';”
хоть
str=“UPDATE z SET area = ‘”+rez.decode(“UTF8”)+“’ WHERE purchaseNumber='”+str(nzak)+“';”
ничего не помогает, в текстовый файл пишет изначально в нормальной кодировке… что делать??
Офлайн
857
>>> 'ТС-тендер'.encode('utf-8').decode('cp1251') 'РўРЎ-тендер' >>>
Офлайн
0
qe=rez.encode('utf-8').decode('cp1251')
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
не помогает(( я уже весь стэковерфлоу перерыл, что только не пробовал, не помогает…
выдает ошибку на этом преобразовании…
Офлайн
857
andreykourУ тебя в исходнике написан где-то русский текст, а декларация кодировки в файле не выставлена. К этим преобразованиям это не имеет отношения.UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Отредактировано py.user.next (Ноя. 30, 2015 00:31:06)
Офлайн
0
да, я граблю русский текст, в начале файла у меня стоит
# coding: utf8
больше я нигде кодировок не касаюсь… может надо изначально определять кодировку не как utf8, а cp1251???
Офлайн
253
andreykourОчень Очень плохая идея.
может надо изначально определять кодировку не как utf8, а cp1251???
Офлайн
0
хорошо, а что делать тогда??? у меня текст то не большой…
# coding: utf8 from sys import stdout from bs4 import BeautifulSoup import pypyodbc import urllib2 cnxn = pypyodbc.connect('DSN=') cursor = cnxn.cursor() cursor.execute("SELECT pNumber FROM z;") headers = {'User-Agent' : 'Mozilla 5.10'} ustr='' for nzak in cursor.fetchall(): url='http://zakupki.gov.ru/epz/order/notice/ea44/view/common-info.html?regNumber=' + (nzak[0]) try: request = urllib2.Request(url, None, headers) resp = urllib2.urlopen(request) HTML = resp.read() soup = BeautifulSoup(HTML, 'lxml') table_cols = soup.find_all('tr') for row in table_cols: YY=str(row).rfind('Наименование электронной площадки в ', 0) if YY>0: rez=str(row) GG=rez.rfind('<td>', 0) rez=rez[GG+4:] ustr="UPDATE z SET area = '"+rez.encode('utf-8').decode('cp1251')+"' WHERE pNumber='"+str(nzak[0])+"';" updaters.execute(ustr) cnxn.commit()
Отредактировано andreykour (Ноя. 30, 2015 09:29:18)
Офлайн
0
нет? никто не подскажет куда надо cp1251 воткнуть???
Офлайн
857
andreykourПеред этой строкой вставьupdaters.execute(ustr)
print ustr
Отредактировано py.user.next (Ноя. 30, 2015 12:21:41)
Офлайн
0
я справился, спасибо большое!!!
оказалось, что BeautifulSoup изначально всё делает в utf8, я все части запроса отдельно указал, что utf8, склеил в одну строку, а потом сделал как вы выше писали qe=ustr.decode('utf8').encode('cp1251') и всё зафурыкало!
Офлайн