Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 27, 2015 15:34:28

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

Коллеги!


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

ничего не помогает, в текстовый файл пишет изначально в нормальной кодировке… что делать??

Офлайн

#2 Ноя. 27, 2015 16:43:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

>>> 'ТС-тендер'.encode('utf-8').decode('cp1251')
'ТС-тендер'
>>>
У тебя в базе кодировка cp1251.



Офлайн

#3 Ноя. 29, 2015 20:52:46

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

qe=rez.encode('utf-8').decode('cp1251')
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

не помогает(( я уже весь стэковерфлоу перерыл, что только не пробовал, не помогает…
выдает ошибку на этом преобразовании…

Офлайн

#4 Ноя. 30, 2015 00:30:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

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)

Офлайн

#5 Ноя. 30, 2015 08:26:49

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

да, я граблю русский текст, в начале файла у меня стоит
# coding: utf8
больше я нигде кодировок не касаюсь… может надо изначально определять кодировку не как utf8, а cp1251???

Офлайн

#6 Ноя. 30, 2015 08:34:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

andreykour
может надо изначально определять кодировку не как utf8, а cp1251???
Очень Очень плохая идея.



Офлайн

#7 Ноя. 30, 2015 08:51:26

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

хорошо, а что делать тогда??? у меня текст то не большой…

# 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)

Офлайн

#8 Ноя. 30, 2015 11:02:09

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

нет? никто не подскажет куда надо cp1251 воткнуть???

Офлайн

#9 Ноя. 30, 2015 12:21:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

andreykour
updaters.execute(ustr)
Перед этой строкой вставь
print ustr
и скопируй сюда то, что выводится.



Отредактировано py.user.next (Ноя. 30, 2015 12:21:41)

Офлайн

#10 Ноя. 30, 2015 12:51:14

andreykour
Зарегистрирован: 2015-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

2.7 pypyodbc не могу забадать кодировку....utf8

я справился, спасибо большое!!!

оказалось, что BeautifulSoup изначально всё делает в utf8, я все части запроса отдельно указал, что utf8, склеил в одну строку, а потом сделал как вы выше писали qe=ustr.decode('utf8').encode('cp1251') и всё зафурыкало!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version