Найти - Пользователи
Полная версия: 2.7 pypyodbc не могу забадать кодировку....utf8
Начало » Python для новичков » 2.7 pypyodbc не могу забадать кодировку....utf8
1
andreykour
Коллеги!


Подскажите, есть 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)+“';”

ничего не помогает, в текстовый файл пишет изначально в нормальной кодировке… что делать??
py.user.next
>>> 'ТС-тендер'.encode('utf-8').decode('cp1251')
'ТС-тендер'
>>>
У тебя в базе кодировка cp1251.
andreykour
qe=rez.encode('utf-8').decode('cp1251')
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

не помогает(( я уже весь стэковерфлоу перерыл, что только не пробовал, не помогает…
выдает ошибку на этом преобразовании…
py.user.next
andreykour
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
У тебя в исходнике написан где-то русский текст, а декларация кодировки в файле не выставлена. К этим преобразованиям это не имеет отношения.
andreykour
да, я граблю русский текст, в начале файла у меня стоит
# coding: utf8
больше я нигде кодировок не касаюсь… может надо изначально определять кодировку не как utf8, а cp1251???
doza_and
andreykour
может надо изначально определять кодировку не как utf8, а cp1251???
Очень Очень плохая идея.
andreykour
хорошо, а что делать тогда??? у меня текст то не большой…

# 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
нет? никто не подскажет куда надо cp1251 воткнуть???
py.user.next
andreykour
updaters.execute(ustr)
Перед этой строкой вставь
print ustr
и скопируй сюда то, что выводится.
andreykour
я справился, спасибо большое!!!

оказалось, что BeautifulSoup изначально всё делает в utf8, я все части запроса отдельно указал, что utf8, склеил в одну строку, а потом сделал как вы выше писали qe=ustr.decode('utf8').encode('cp1251') и всё зафурыкало!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB