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

cpprest传递日文字符触发URI无效错误的原因排查

问题原因与解决方案

这个问题的核心原因很明确:你没有对URL路径中的非ASCII日文字符进行URL编码。

HTTP协议的URI规范明确要求,除了一小部分ASCII字符(比如字母、数字、-._~这些)之外,所有其他字符都需要编码成%XX的十六进制格式。你用conversions::to_utf8string把日文转成了UTF-8字符串,但这只是完成了字符编码的转换,并没有把这些多字节的UTF-8字符转换成符合URI要求的编码形式。直接把未编码的日文放到URL路径里,会被解析成乱码(就是你看到的?? ??),服务器自然会判定这是一个无效的URI。

解决方法

cpprest(Casablanca)库已经提供了专门的URL编码函数web::uri::encode_uri_component,你只需要在把搜索文本传入请求前,用这个函数对其进行编码即可:

auto nullValue = json::value::null();
std::string searchText = conversions::to_utf8string("北島 美奈");
// 对搜索文本执行URL编码,符合URI规范
std::string encodedSearchText = web::uri::encode_uri_component(searchText);
make_request(client, methods::GET, nullValue, encodedSearchText);

这个函数会把“北島 美奈”转换成符合URI要求的%E5%8C%97%E5%B3%B6%20%E7%BE%8E%E5%A5%88格式,服务器收到后就能正确解码并识别出搜索关键词,返回你预期的JSON结果。

额外提醒

不光是日文、中文这类非ASCII字符,只要你的路径/查询参数里包含空格、&、=、/这类特殊符号,都需要执行URL编码,否则都会出现类似的URI无效或者参数解析错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:24:29