我的環境:windows平台指令行編碼GBK,python2.7.6。需要用python送出一個中文驗證碼,目标位址的網頁編碼為utf-8,目前自己模拟了服務端。http請求使用python的requests子產品,但是傳回的結果往往不正常,代碼如下:
用戶端:
# python代碼
code = '中文驗證'
# 這裡面的code應該是unicode字元串了
post_data = {
'name':'jack',
'password':'123456',
'code':code # u'\u4E2D\u6587\u9A8C\u8BC1'
}
res = requests.post('http://www.test.com',data=post_data)
# 使結果集正确顯示中文
res = res.content
unicode(res,"utf-8")
if '驗證碼有誤' in res:
print 'authcode error,retry...'
else:
print 'success'
#這是服務端的PHP代碼
if ($_POST['code'] == '中文驗證'){
$result = $db->insert($_POST);
} else {
echo '驗證碼有誤';
$_POST['code'] = $_POST['code'].'e';
$result = $db->insert($_POST);
}
然後奇怪的事情出現了,資料庫code字段裡面插入了一些“中文驗證” 和 一些“中文驗證e”,請問這是什麼情況?如果編碼有問題,怎麼會時而判斷正确時而判斷錯誤呢?
補充聲明:
沒有亂碼的問題,插入資料庫都是正常的,其實在定義post_data dic的時候,python本身已經把中文unicode了,但是為什麼把這串unicode送出到伺服器跟“中文驗證”比對的時候,有時候出錯,有時候正确呢?