
libcurlでGETメソッドを使い、日本語が含まれているサイトにリクエストをすると日本語が文字化けしてしまいます。
発生している問題・エラーメッセージ
あまりにも長文になってしまうので、文字化けしている部分の切り抜きです。
<meta property="og:title" content="繧ィ繝ウ繧ク繝九い縺ォ髢「縺吶k遏・隴倥r險倬鹸繝サ蜈ア譛峨☆繧九◆繧√・繧オ繝シ繝薙せ - Qiita">
該当のソースコード
C++
1#include <stdio.h> 2#include <iostream> 3#include <string> 4#include <curl/curl.h> 5 6#include <fstream> 7 8using namespace std; 9 10 11size_t write_data(void* ptr, size_t size, size_t nmemb, string* data) { 12 data->append((char*)ptr, size * nmemb); 13 return size * nmemb; 14} 15 16int main() { 17 CURL* curl; 18 CURLcode res; 19 20 string buffer; 21 22 curl_slist* headers = NULL; 23 24 curl = curl_easy_init(); 25 26 if (curl) { 27 curl_easy_setopt(curl, CURLOPT_URL, "https://qiita.com/"); 28 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 29 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); 30 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 31 headers = curl_slist_append(headers, "Accept-Charset: utf-8"); 32 curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "utf-8"); 33 res = curl_easy_perform(curl); 34 curl_easy_cleanup(curl); 35 36 } 37 38 cout << buffer << endl; 39 40 return 0; 41}
試したこと
この部分の追加
C++
1headers = curl_slist_append(headers, "Accept-Charset: utf-8"); 2curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "utf-8");
補足情報(バージョンなど)
OS: Windows 10
Visual Studio 2022
C++98

文字化けの意味が明確じゃありません。Linuxで試したところ、正しくutf-8が返っています。
(追記)
伝わってないかもしれませんね。例えば、コマンドプロンプト上でデフォルトの設定(cp932)のままutf-8を標準出力に垂れ流せば文字化けしますが、それはlibcurlと何の関係もない端末及びその設定の問題です。

回答1件
あなたの回答
tips
プレビュー