Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2010 14:41:13

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

Нужно осуществить запрос к сайту, подскажите как стандартными библиотеками, или же используя PyCurl из строки “привет” получить строку “%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82”.
Спасибо.

Пробовал так

import urllib
params = urllib.urlencode({'q': “привет”})
print params

но выводит, что “привет” это “%EF%F0%E8%E2%E5%F2”. А мне надо utf получить, чтобы каждый символ двумя байтами



Отредактировано (Март 9, 2010 14:44:19)

Офлайн

#2 Март 9, 2010 14:43:26

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

url encode кирилица

import urllib
urllib.urlencode({'var1':u'привет'})



Офлайн

#3 Март 9, 2010 14:46:36

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

regall
import urllib
urllib.urlencode({'var1':u'привет'})
>>> import urllib
>>> urllib.urlencode({'var1':u'привет'})
Traceback (most recent call last):
File “<interactive input>”, line 1, in <module>
File “C:\Python26\Lib\urllib.py”, line 1268, in urlencode
v = quote_plus(str(v))
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-5: ordinal not in range(128)

в чем может быть дело?



Отредактировано (Март 9, 2010 14:47:45)

Офлайн

#4 Март 9, 2010 14:54:58

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

Спасибо, проблему решил так:

import urllib
print urllib.quote(“привет”);



Офлайн

#5 Март 9, 2010 14:55:17

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

url encode кирилица

даю кусок переписки по аське:
- from urllib import unquote
- я дико извиняюсь, но я перевел строку в вид u'\xd0\xb2\xd0\xb0\xd0\xbf\xd0\xb2\xd0\xb0\xd0\xbf\xd0\xb2\xd0\xb0' , а дальше как можно ее перевести в кирилицу?
- убрать впереди u, так как это utf8 а не юникод
- строка.decode('utf-8') сделает unicode
- спасибо!!!

Офлайн

#6 Март 9, 2010 15:12:34

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

Подскажите еще, что за странная странность:
Когда пишу
print urllib.quote(“привет”);

он выводит нормально:
%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82

а когда пишу:
print urllib.quote(sys.argv) # а в sys.argv=привет
то он выводит
%EF%F0%E8%E2%E5%F2

в начале файла прописано:
# -*- coding: utf-8 -*-



Офлайн

#7 Март 9, 2010 15:45:10

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

url encode кирилица

Iv_, # -*- coding: utf-8 -*- определяет только в какой кодировке исходник написан. и ко внешним источникам никакого отношения не имеет. необходимо явно конвертировать строку.



Отредактировано (Март 9, 2010 15:45:47)

Офлайн

#8 Март 10, 2010 06:57:46

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

cutwater
Iv_, # -*- coding: utf-8 -*- определяет только в какой кодировке исходник написан. и ко внешним источникам никакого отношения не имеет. необходимо явно конвертировать строку.
Подскажи пожалуйста как? )))



Офлайн

#9 Март 10, 2010 07:17:33

Iv_
От:
Зарегистрирован: 2010-03-09
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

url encode кирилица

sys.argv.decode(“utf-8”)

выдает

print sys.argv.decode(“utf-8”)
File “C:\Python26\Lib\encodings\utf_8.py”, line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: ‘utf8’ codec can't decode bytes in position 0-2: invalid data



Офлайн

#10 Март 10, 2010 07:57:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

url encode кирилица

На Windows используется cp866 для sys.argv, если я ничего не путаю.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version