Python + WebDriver, преобразование "\xe7" в нормальный вид

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

Это бинарный запакованный тип данных, который представляет из себя некую структуру, для распаковки нужно знать структуру. В любом случае мой ответ был неправильный :slight_smile:

result = cur.fetchall()
а потом каждый элемент в списке обрабатываете decode(“cp1251”)

так ?

result = cur.fetchall()
result = str(result)
for row in result:
    print row.decode("cp1251")

Смотря что в списке в result, на сколько я помню возвращается список списков, тобишь если запрос возвращает одну строку то будет row[0].decode(“cp1251”)

если делать вывод после этого куска

result = cur.fetchall()
result = str(result)
print result.decode("cp1251")

то результат вот такой
[('"\xd7\xd0\xdf\xd0\xe0\xde\xdc\xd0\xe0""\xf7\xd2\xda\xd0"',)]

если добавлять к result[0] то он просто выводит первый символ [
если там выбрать например result[9] то будет х
без преобразования

если запихнуть это в цикл как я написал выше
то результат выводит в каждой строке по символу
[
(

"

x
d
7
тоже без преобразования … ((
я уже думаю, что это нерешаемый вопрос … вообще нет идей

Все, сделал ))))
ошибка была вообще не там где искали …

я изначально заменил кодировку на ту, которая у меня в базе
environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8ISO8859P5"
как и советовали…
но оказывается, нужно было немного не так заменить …
вобщем сделал вот так
environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8MSWIN1251"
и все заработало ))

всем спасибо ))

особая благодарность rmerkushin ))
я думал после второго моего поста о неудаче ты меня пошлешь как чайника ))

но это все равно не дает ответа на мой вопрос ))

вот этот кусок кода

# -*- coding: utf-8 -*-
import cx_Oracle
from os import environ

environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8MSWIN1251"

dsn_tns = cx_Oracle.makedsn(ip, port, SID)
db = cx_Oracle.connect(login,passw, dsn_tns)
cur = db.cursor()

cur.execute("select city_desc from table where city_desc not like '%запа%' order by dbms_random.value")

rows = cur.fetchall()
united_rows = []
for row in rows:
    united_rows.extend(row)
d_row = [s.decode("cp1251") if s else "" for s in united_rows]

for x in d_row:
    print x.encode('utf-8')

cur.close()
db.close()

результат

Наталівка
Безлюдівка
Верхнє Піщане
Бикова Гребля

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

пробовал через x[0] так оно показывает только первую букву…
хелп…

немного изменил

d_row = [s.decode("cp1251") if s else "" for s in united_rows]

d_row = '.'.join(d_row)
y = d_row.encode("utf-8")
y.split(".")
print y

cur.close()

результат “y” до сплита

Софіївка.Малі Сорочинці.Джурків.Пилявка

не понимаю почему сплит не пашет, по идее должно вывести все до точки, а значит только “Софіївка”, почему не работает ???

Нужно присвоить результат выполнения сплита?

все, сделал ))

z = y.split(".")
print z[0]

всем спасибо ))

и как обычно не все так гладко как казалось )))

z = y.split(".")
q = z[0]
print q

srch = driver.find_element_by_xpath("//input[@type='text'][@name='city']")#-------city
srch.click()
srch.send_keys(q)

начинает возмущаться на кодировку опять

File “C:\Program Files\Python\lib\json\encoder.py”, line 270, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xd0 in position 0: unexpected end of data

что это может быть?

все, решил )))
добавил строку

q = z[0]
q = unicode(q,'utf-8')
1 лайк

Именно из за проблем с кодировкой (ну есть и еще причины, но главная эта), постоянными encode\decode я и перешел на python 3 :smile: там все в unicode )

я бы тоже перешел, и даже пытался, но к сожалению на тестовом окружении заказчика стоит запрет на установку программ, а просить админов, это проще поделить на 0 чем их упросить ))