http-post リクエストをサーバーに送信する必要があります。libcurl 関数を使用することにしました。要求データは xml 形式のようにする必要があります。そのため、libxml2 を使用して文字列を xml に変換し、xml ファイルを buf に読み込み、buf を libcurl に渡し、ポスト リクエストを終了します。libxml2でencoding-utf8で作成したxmlファイルをlibcurl関数に送ると正常なようです。しかし、パッケージをサーバーにキャッチしたところ、英語の文字はすべて正常であることがわかりましたが、私の母国語である「中国語」は「?」に置き換えられており、本当に混乱しました。utf-8 文字列を転送するように libcurl 関数を設定できますか? さて、私のテスト環境は linux c です。これは libxml2 によって作成された私の xml です:
<vehicleName>±GM7180LE AT</vehicleName>
ご覧のとおり、英字はすべて正常です。最初の 2 文字はすべて中国語です。それらは「别克」でなければなりません。libxml2 は自動的に gb2312 から utf8 に変換します。
xmlSaveFormatFileEnc(createXML, doc, "UTF-8", 1);
次に、このxmlから読み取った文字列をlibcurl関数に送信しますが、サーバーが受信したデータは±GMではなく??GMであることがわかりました。libcurl コードは curl_easy_setopt(curl, CURLOPT_URL, ip_addr); です。curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestMsg); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(requestMsg)); 私は今どうすればいい?
回答 Alfe: libxml2 コードは次のようになります。
char licenseNo_text[20] = "沪33333";
licenseNo = xmlNewNode(NULL, BAD_CAST "licenseNo");
content = xmlNewText(BAD_CAST licenseNo_text);
xmlAddChild(QueryVehicleModelRequest, licenseNo);
xmlAddChild(licenseNo, content);
xml ファイルにノードを追加した後、それを buf に読み込みます。
while ((ch = getc(fp)) != EOF) {
if (ch != '\n')
buf[i++] = ch;
}
buf はすでに utf-8 になっていると思うので、libcurl 関数に直接渡します。
ret = func_libcurl(buf, headerfilename, bodyfilename);
func_libcurl コードは、requestMsg は http-post head and body:
curl_easy_setopt(curl, CURLOPT_URL, ip_addr);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestMsg);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(requestMsg));
headerfilename、bodyfilename は、サーバーの応答からデータを保存するためのファイル記述子です。
最後に、libxml2 を使用してファイル「bodyfilename」を解析します。ファイル「bodyfilename」は、サーバーからの応答データを保存しました。これは utf-8 であり、gb2312 に正常に解析できます。
それで全部です。