最近在使用 C 語言接受 POST JSON 數據時,發現一直出現亂碼的問題。經過一番研究,我總結了幾個解決方案,現在分享給大家。
#include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcgi_stdio.h> #include <jansson.h> void handleRequest() { char *contentLength = getenv("CONTENT_LENGTH"); char *postData = malloc(atoi(contentLength) + 1); // + 1 for null character memset(postData, 0, atoi(contentLength) + 1); if (fread(postData, 1, atoi(contentLength), stdin) == 0) { printf("Content read error\n"); return; } json_t *root; json_error_t error; root = json_loads(postData, 0, &error); if (!root) { printf("Invalid JSON string\n"); free(postData); return; } printf("JSON object:\n%s\n", json_dumps(root, JSON_INDENT(2))); json_decref(root); free(postData); } int main() { while (FCGI_Accept() >= 0) handleRequest(); return 0; }
以上是一個使用 FCGI 庫接受 POST JSON 數據的例子,在使用時需要注意以下幾點:
- 在讀取 POST 數據時需要使用 fread 函數,使用 fgets 函數是無法讀取整個 POST 數據的。
- 在將 POST 數據傳入 JSON 解析函數前,需要將 POST 數據中的控制字符去除。
- 在輸出解析后的 JSON 數據時需要使用 json_dumps 函數。
總結來說,解決亂碼問題需要注意提前去除 POST 數據中的控制字符,并使用正確的庫函數進行解析。
下一篇python 登陸循環