2016-06-24 147 views
1

我發佈這個字符「ç」,通常通過表單發送到我不控制的網站。我在編碼數據時遇到了麻煩。嘗試沒有它編碼爲UTF-8發送數據產生這個錯誤(更正:適用於另一個特殊字符這個錯誤,錯誤!):請求使用python進行POST編碼

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) 

我從保存UTF .csv文件中讀取數據-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')) 

作爲即時通訊相信你會發現,我不是很懂行的有關編碼所以儘量與我裸露。

任何人都有關於如何發送這些特殊字符並讓它們正確顯示的提示?或者我應該放棄並全部編輯它們。他們的網站形式無論如何管理它,所以我也想:)

謝謝你的任何和所有幫助。

編輯更完整的.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字符。嘗試「信息」:ü「ç」。另外看看包含你的代碼的文件是否是UTF-8編碼 – Goufalite

+0

代碼和數據文件都是utf-8。不得不離開一段時間。稍後再回來(並感謝幫助sofar)。 – raecer

+0

'body = body.encode'('iso-8859-1')'是來自httplib,即試圖對請求的主體進行編碼的iso-8859-1,添加實際代碼 –

回答

1

這個問題最簡單的答案是我打開數據文件時沒有指定編碼。如果我將encoding="utf-8"添加到打開的函數中,並將請求編碼爲utf-8,則可能會很快解決此問題。