在現代Web開發中,JSON是一個非常重要的數據交換格式。尤其在API的設計中,JSON是非常常見的交換格式。C語言中,也有許多實現JSON數據格式的庫,例如 cJSON、Jansson 等。
但是,在C語言中,處理中文編碼是一個很容易出錯的問題。因為中文需要使用 Unicode 編碼,而C語言中的字符變量只有1個字節,需要配合使用寬字符類型或者UTF8字符串類型來處理中文編碼。
// 示例1:使用UTF8字符串來作為JSON數據請求體 char json_string[] = "{ \"message\": \"你好,世界!\" }"; long http_code; CURLcode res; CURL *curl = curl_easy_init(); if (curl) { struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api/"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_string); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(json_string)); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); } // 示例2:使用寬字符類型處理JSON數據請求體 wchar_t message[] = L"你好,世界!"; cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "message", message); char *json_string = cJSON_Print(root); long http_code; CURLcode res; CURL *curl = curl_easy_init(); if (curl) { struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api/"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_string); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(json_string)); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); }
以上兩個示例都可以用于發送包含中文字符的JSON數據請求。第一個示例中,使用了UTF8字符串來保存JSON數據請求體。第二個示例中,使用了C語言的寬字符類型來處理中文編碼,然后轉換為JSON格式的字符串。
無論是使用哪種方式,都需要注意JSON數據的編碼方式,尤其是在涉及到中文編碼時。在使用C語言編寫JSON數據請求代碼時,更加需要小心謹慎,以避免因為中文編碼錯誤而導致請求失敗。