You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2017 C++使用libcurl发JSON POST到Zendesk时Umlauts乱码为问号

问题根因

你遇到的字符乱码问题核心是Windows环境下字符串默认编码和服务端要求的UTF-8编码不匹配,Postman和VS/Windows原生curl的差异如下:

  • Postman内部所有字符串、请求payload默认使用UTF-8编码处理,发送的字节流完全符合Zendesk的编码要求,因此不会出现乱码。
  • Windows系统默认本地编码(德语区通常为Windows-1252,国内为GBK),VS编译C代码时,默认会把源码中的字符串字面量TestÜÄÖ转换为本地编码的字节存储,你发送的实际payload字节不是UTF-8格式,Zendesk按UTF-8解析失败就会将无法识别的字符替换为?。
  • 你之前添加charset的操作未生效,大概率是请求头格式错误,且就算头配置正确,payload本身编码错误也无法解决问题。

解决方案

VS项目配置修改

  1. 强制VS编译器使用UTF-8处理字符串字面量:打开项目属性→C/C++→命令行→附加选项,添加编译参数/utf-8,保存后重新编译即可。
  2. 修正请求头配置,将原有Content-Type: application/json替换为Content-Type: application/json; charset=utf-8,明确告知服务端编码格式。

兜底兼容方案

如果不想修改项目编译配置,可以直接将Umlauts特殊字符替换为JSON标准的Unicode转义序列:

  • Ü 对应 \u00DC
  • Ä 对应 \u00C4
  • Ö 对应 \u00D6
    修改后的payload字符串为:
const char *data = "{ \"user\": {\"external_id\": \"160102\", \"name\" : \"Test\u00DC\u00C4\u00D6\", \"phone\": \"014567-0\", \"user_fields\": { \"anrede\": \"Herr\"}, \"organization\":{\"name\":\"testorg\"}, \"email\" : \"\"} }";

该方案不受源码、编译编码影响,兼容性更强。

Windows cmd curl乱码修复

cmd默认使用系统本地代码页,执行curl前先运行命令chcp 65001切换到UTF-8代码页,再执行curl命令即可正常发送特殊字符。

内容的提问来源于stack exchange,提问作者Juri D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:03