首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于UTF-8请求的cURL。当应该是安倍的时候,它总是像�abe一样

用于UTF-8请求的cURL。当应该是安倍的时候,它总是像�abe一样
EN

Stack Overflow用户
提问于 2012-05-19 11:03:31
回答 1查看 2.8K关注 0票数 2

嗯,我在Visual 2008和Windows7Professional 32位上使用C++中的libcurl发送带有UTF-8字符的请求,但问题是我得到了那个编码错误。�abe而不是çabe

当我在本地主机服务器上进行测试时,我注意到了一件事,这是我第一次在echo $_POST['post'];服务器上接收到它,它是�abe,但是如果我对它进行编码,它是正确的:echo utf8_encode($_POST['post']);它来了çabe,这是我想要的。

但是问题是,我无法控制接收数据的服务器,我想发送已经用UTF-8编码的数据。

我怎么能这么做?

这是我的帖子部分

代码语言:javascript
复制
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
std::string post = "çabe";
url_formadd(&formpost,
      &lastptr,
      CURLFORM_COPYNAME, "post",
      CURLFORM_COPYCONTENTS, post.c_str(),
      CURLFORM_END);

@编辑

根据DietrichEpp的说法,为了看我是否开着UTF-8,我可以简单地测试一个不同字符的长度,例如“it”,所以我尝试了printf("%d\n", (int) strlen("ç")); -,它应该打印出2或3表示UTF-8,或者1打印其他东西。

它打印出了1,所以这可能就是原因,我怎么才能解决这个问题呢?

我希望将其设置为UTF-8,或者至少能够在cURL的post字段中使用时将其设置为cURL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 12:52:34

如果你想发送UTF-8编码的数据,你必须用UTF-8编码它。例如,在UTF-8中编码的“\xC3\xA7”可以移植地拼写为

代码语言:javascript
复制
std::string post = "\xC3\xA7abe";

Visual 2008应该能够自动实现在UTF-8中保存文件,省去了自己编写这种编码的麻烦。如果您被困在ISO 8859-1中,这种特定的代码转换到UTF-8可以很容易地实现(优化作为练习留下):

代码语言:javascript
复制
std::string utf8_from_iso8859_1(std::string str)
{
  std::string res;
  for (std::string::iterator i = str.begin(); i < str.end(); i++) {
    if (0 <= *i && *i < 0x80)
      res += *i;
    else {
      res += 0xC0 | ((*i >> 6) & 0x03);
      res += 0x80 | (*i & 0x3F);
    }
  }
  return res;
}

然后使用

代码语言:javascript
复制
std::string post = "çabe";
std::string encoded = utf8_from_iso8859_1(post);
url_formadd(&formpost,
  &lastptr,
  CURLFORM_COPYNAME, "post",
  CURLFORM_COPYCONTENTS, encoded.c_str(),
  CURLFORM_END);

从其他编码转码将需要一个特定的映射,您最好的选择是使用像利比索诺夫这样的专用库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10664610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档