最近在使用c語言進(jìn)行http post請求,遇到了一個問題,就是在請求中使用json格式傳輸數(shù)據(jù)時,出現(xiàn)了中文亂碼的情況。
在調(diào)試過程中,我們發(fā)現(xiàn)json格式數(shù)據(jù)本身沒有問題,但在http post請求中,中文字符被編碼成了utf-8格式的數(shù)字,這就導(dǎo)致了接收方無法正確解析數(shù)據(jù)。
例如,原本的json格式數(shù)據(jù)為: { "name":"張三", "age":25 } 但在http post請求中變成了下面這樣: %7B%22name%22%3A%22%u5F20%u4E09%22%2C%22age%22%3A25%7D 這就造成了中文亂碼的情況。
解決這個問題的方法是,在http post請求中指定正確的編碼方式。在我們使用curl庫進(jìn)行http請求時,可以使用CURLOPT_POSTFIELDSIZE選項(xiàng)指定POST請求的數(shù)據(jù)長度,同時指定正確的Content-Type頭部信息,如下所示:
CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_text); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(json_text)); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Content-Type: application/json; charset=utf-8"); res = curl_easy_perform(curl); curl_easy_cleanup(curl); }
在指定Content-Type時,我們要注意charset參數(shù)需要設(shè)置為utf-8,這樣接收方才能正確解析請求中的中文字符。
總的來說,使用c語言進(jìn)行http post請求傳輸json格式數(shù)據(jù)遇到中文亂碼問題的解決方法就是指定正確的Content-Type頭部信息,并將請求數(shù)據(jù)轉(zhuǎn)換為utf-8編碼格式進(jìn)行傳輸。