Найти - Пользователи
Полная версия: Неработает replace
Начало » Python для новичков » Неработает replace
1
Psixo
Есть простейший код:

result_text = result_text.replace("&lt;", "<")
Если я задаю строку в тексте скрипта, замена происходит без проблем. Но мне требуется так обработать ответ вэб-сервера, тут и возникает проблема. Код ничего не заменяет.

Ответ сервера в UTF-8, decode ни на что не влияет.

Глупо до жути.споткнулся на ровном месте и уже пол часа не могу понять в чем дело.
truporez
по указанной вами строке что-то конкретное сказать сложно. возможно ответу от сервера необходимо делать read()
Psixo
С ответом сервера нет проблем. Все нормально,я получаю с него текстовые данные методом read, складываю их в строковую переменную. Вывожу на экран и там куча &lt и других псевдокодов,мне их надо конвертировать непосредственно в символы. Так они не конвертируются через replace.

def Translate(text):
# Настраиваем соединение
url = "http://translate.google.ru/"
headers = { "User-Agent" : 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.17) Gecko/2010010604 Ubuntu/8.04 (hardy) Firefox/3.0.17',
"Accept-Charset" : "utf-8;",
"Referer" : "http://translate.google.ru/",
"Cookie" : "PREF=ID=5b088d76f1cac0a5:U=d7775a28a3dfce07:NW=1:TM=1259370821:LM=1259371193:S=verfYFaVMF6ZuDws; NID=29=e1qWIgspNh_B6dkX6A6-lntGkQ91b2O9FVtQ_l7Wl7PFuRYiQzV017m9vjd_RkDSdsXp_b7ewtolae1O8LPh7wrGuAJ0j-DO4SqmXkBTDJIn04h7mgdtQ4M4zyIdXbQ8; SID=DQAAAIgAAAA-EjLPzrQtenJEEVxcIWCg0OZbRnjljsBH3mz0q7UyT7M9bMolhicIABBaQYi5P8G3MOux77kVc74VmmPimkpilbBlQr9It_G8zOtXT542HDkSngAxUbvjtcxImY1KR8Cydb_MALID04XQWEAvtAKbT0gz7NJTtzATors2CRHJlzuJf3gvzR0yk3R3DyHxkBI; HSID=AObaT9Ng4RIvykdQM"
}
post_str = "js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&" + urllib.urlencode({'text' : text}) + "&file=&sl=ru&tl=uk"

# Отправляем запрос
req = urllib2.Request(url, post_str, headers)
resp = urllib2.urlopen(req)
page = ""
try:
page = resp.read()
except:
return ""

# Вытаскиваем текст перевода
text_list = re.findall(r'<textarea name=utrans wrap=SOFT dir="ltr" id=suggestion style="width:80%;margin:5px 0;overflow:auto">(.+?)</textarea>', page)
result_text = ""
for line in text_list:
result_text += line + "\n\n"

return result_text


def Del_Spec_Chars(text):

result_text = text
result_text = result_text.replace("&lt;", "<")
result_text = result_text.replace("&gt;", ">")
result_text = result_text.replace("&quot;", "\"")
result_text = result_text.replace("&nbsp;", " ")
result_text = result_text.replace("&amp;", "&")
result_text = result_text.replace("<br>", "\n")
result_text = result_text.replace("'", r"'")

return result_text
Это отправка запроса на перевод строки с русского на украинский через переводчик гугла. Все спец-символы он переводит в псевдкод типо &lt; и т.п. Мне их после перевода надо возвернуть. replace и re.sub, не работают.
Del_Spec_Chars не проводит замены с ответом сервера, но зато проводит их с любой переменной которую я создам ручками в скрипте. И я не понимаю какая между ними разница, почему replace октазывается работать с текстом полученным с сервера.
Psixo
Вопрос снят.
Проблема была в том что амперсанд (&) на сервере дважды переводится в спецсимвол %) как-то так.
o7412369815963
Psixo
Вопрос снят.
Проблема была в том что амперсанд (&) на сервере дважды переводится в спецсимвол %) как-то так.
как то так, но сам перевод храниться в другом теге, хотя раньше нормально хранился и в texarea
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