2016-06-24 2 views
1

Я отправляю этот символ «ç», который обычно отправляется через форму на веб-сайт, который я не контролирую. У меня возникают проблемы с кодировкой данных. Попытка отправить данные без кодирования его в UTF-8 производит эта ошибка (исправление: эта ошибка была для другого специального символа, перепутать!):Запросы POST-кодирования с помощью python

File "D:\Python34\lib\http\client.py", line 1181, in _send_request 
body = body.encode('iso-8859-1') 
UnicodeEncodeError: 'latin-1' codec can't encode character '\u0192' in position 512: ordinal not in range(256) 

Я чтение данных из файла .csv, сохраненного с UTF -8 кодирующая (эта часть проблемы?)

После использования .encode («UTF-8») и немного проб и ошибок:

отправляю это: C Отображение на своем сайте как: §

Публикация этого вопроса: ç Отображается на сайте как: ç

Образец укороченного кода:

headers = { 
'Accept' : 'application/json, text/javascript, */*; q=0.01', 
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' 
} 

data = { 
"info" : "ç" 
} 

r = requests.post('www.urlgoeshere.com', headers=headers, data=json.dumps(data,ensure_ascii=False).encode('utf-8')) 

Как я уверен, вы заметите, я не очень хорошо осведомлен о кодировок, поэтому постарайтесь, чтобы обнажить со мной.

У каждого есть какие-либо советы о том, как я могу отправить эти специальные символы и правильно их отобразить? Или я должен просто отказаться от них и отредактировать их все. Их форма сайта управляет им в любом случае, поэтому я бы тоже хотел :)

Благодарим вас за помощь и помощь.

Edit для более полного кода .csv:

with open('data.csv', newline='') as dataFile: 
dataReader = csv.reader(dataFile) 
for row in dataReader: 
    data = { 
    "values":{ 
    "title_id":row[1], 
    "title":row[0], 
    "other stuff":[{"foo":"bar", 
    "too":"foobar"}]} 
    } 

Это в этом цикле, что я сделать запрос, а также. Data.csv представляет собой файл с разделителями-запятыми, сохраненный как utf-8.

+0

Видимо вы отправляете символ ISO-8859-1. Попробуйте «info»: u «ç». Также посмотрите, является ли файл, содержащий ваш код кодировкой UTF-8 – Goufalite

+0

Код и файл данных являются utf-8. Придется уйти на некоторое время. Вернитесь позже (и спасибо за помощь sofar). – raecer

+0

Строка 'body = body.encode ('iso-8859-1')' is from httplib, которая пытается закодировать тело запросов iso-8859-1, добавить фактический код –

ответ

1

Самый простой ответ на этот вопрос заключался в том, что я открывал файл данных без указания кодировки. Если бы я добавил encoding="utf-8" в открытую функцию и закодировал запрос как utf-8, это было бы решено довольно быстро.

Смежные вопросы