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

IntelliJ字符串拼接问题:调用服务时URL非法字符报错

解决URL日期参数引发的“Illegal character in scheme name”错误

嘿,我来帮你搞定这个问题!你遇到的这个报错,核心原因是URL里的双引号"和空格都是非法字符——直接用引号包裹日期、或者简单用单引号/加号拼接根本没解决这些非法字符的问题,所以错误才会一直出现。

给你几个靠谱的解决办法:

方法1:手动修正URL参数(快速临时方案)

直接去掉日期的双引号,并且把空格换成URL编码后的%20,修正后的代码如下:

serviceCall("""http://example.com/books/report?name=abc&param=env=deck&time=13%20Apr%202010&acct=N&id=wre23""")

这种方式适合快速测试,但如果日期是动态生成的,还是用下面的方法更稳妥。

方法2:用URL编码工具处理参数(推荐)

不管是Kotlin还是Java,都有现成的工具类帮你对参数进行URL编码,避免手动处理的失误。比如Kotlin里可以这样写:

import java.net.URLEncoder
import java.nio.charset.StandardCharsets

val dateStr = "13 Apr 2010"
// 对日期字符串进行URL编码
val encodedDate = URLEncoder.encode(dateStr, StandardCharsets.UTF_8.name())
// 用编码后的日期拼接URL
serviceCall("""http://example.com/books/report?name=abc&param=env=deck&time=$encodedDate&acct=N&id=wre23""")

方法3:用URIBuilder构建URL(最安全)

如果你的参数比较多,或者经常需要调整,用URIBuilder来构建URL是最不容易出错的,它会自动帮你处理编码问题:

// Java示例,Kotlin也可以调用同样的类
import java.net.URIBuilder;

URI uri = new URIBuilder()
    .setScheme("http")
    .setHost("example.com")
    .setPath("/books/report")
    .addParameter("name", "abc")
    .addParameter("param", "env=deck")
    .addParameter("time", "13 Apr 2010")
    .addParameter("acct", "N")
    .addParameter("id", "wre23")
    .build();
serviceCall(uri.toString());

之前你用单引号或者加号拼接没用,是因为这些操作只是改变了字符串的拼接方式,但没处理URL里的非法字符(双引号、空格),所以错误依然存在。用上面的方法处理后,这些非法字符会被转换成URL允许的格式,自然就不会报错啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:02:38