В том то и проблема, когда пишу:
"Post" : 'тест'.encode('cp1251')
то на форуме, в созданой теме, вместо нормальних букв, вместо слова тест:
b'\xf2\xe5\xf1\xf2'
"Post" : 'тест'.encode('cp1251')
b'\xf2\xe5\xf1\xf2'
#!/usr/bin/env python2 # -*- coding: utf-8 -*- s_utf8 = u'тест' s_cp1251 = str(s_utf8.encode('cp1251')) postdata = { "TopicTitle" : s_cp1251 } # код requests ...
#!/usr/bin/env python3 # -*- coding: utf-8 -*- s_utf8 = 'тест' s_cp1251 = str(s_utf8.encode('cp1251')) postdata = { "TopicTitle" : s_cp1251 } # код requests ...
#!/usr/bin/env python3 # -*- coding: utf-8 -*- s_utf8 = 'тест' # текст в unicode utf8 (строка) s_uni = s_utf8.encode('utf8') # последовательность байт (unicode) s_cp1251 = s_uni.decode('cp1251') # текст в unicode cp1251 (строка) print(s_utf8) print(s_uni) print(s_cp1251)
����
b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
тест
тест
b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
тест
тест
bismigalis
не пиши s_utf8, там юникод. пиши s_unicode и просто s в python3в текстовом файле скрипта utf8, когда интерпритатор его считывает, он конвертирует в unicode
omaticstr() то тут каким боком? Вам уже несколько раз правильное решение подсказали:
Тот же код на Python3, возвращает b'\xf2\xe5\xf1\xf2'#!/usr/bin/env python3 # -*- coding: utf-8 -*- s_utf8 = 'тест' s_cp1251 = str(s_utf8.encode('cp1251')) postdata = { "TopicTitle" : s_cp1251 } # код requests ...
#!/usr/bin/env python3 s_utf8 = 'тест' s_cp1251 = s_utf8.encode('cp1251') postdata = { "TopicTitle" : s_cp1251 }
postdata = { "TopicTitle" : 'тест'.encode('cp1251') }
#!/usr/bin/env python3 s_utf8 = 'тест' s_cp1251 = s_utf8.encode('cp1251') postdata = { "TopicTitle" : s_cp1251 }
postdata = { "TopicTitle" : 'тест'.encode('cp1251') }
b'\xf2\xe5\xf1\xf2'
omaticХм. Действительно, в r.request.body b'\xf2\xe5\xf1\xf2' на Python3.
П.С. я так понимаю это баг модуля requests?
reclosedev
А форум не принимает form-urlencoded, т.е. без files={'':''}? Потому что в этом случае все декодируется правильно.
Lukasa commented:
Welcome to the exciting world of Python string handling!
The reason this is happening is that, somewhere in the web stack, someone is calling str() on your string. In Python3, calling str() on a bytestring returns the exact same thing as calling repr(). In this case, that's the byte literal form.
Unfortunately, the current rule is that urllib3 must take native strings. This means you cannot encode your post data: they need to stay as unicode, to be encoded later.