如何转义 API 调用中的特殊字符?

How to escape special characters in the API call?

我正在尝试获取 API 的请求,但是特殊字符“*”(星号)中断了我的 API 调用,因此发送不完整。有什么办法可以逃脱吗?

而不是这个:

https://rest2.bermanngps.cl/BermannRest/api/enviacomando?tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1*8F&md5pass=4e1ed8ef96fb83a0a30c39b0019fadc7&user=1017&avserie=12977

这是发送:

https://rest2.bermanngps.cl/BermannRest/api/enviacomando?tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1

我使用retrofit的GET请求方式,使用repository动态加载Query strings。我将如何在那里使用 URLEncoder 方法?

    @GET("enviacomando")
    suspend fun getSendComando(
    @Query("tk") tk: String,
    @Query("comando") comando: String,
    @Query("md5pass") md5pass: String,
    @Query("user") user: String,
    @Query("avserie") avserie: String
    
    ): Response<SendComandoResponse>

您可以为此使用 URL 编码器 class。 因此,您需要使用 URLEncoder.

对 URL 中的查询部分进行编码
String query = URLEncoder.encode("tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1*8F&md5pass=4e1ed8ef96fb83a0a30c39b0019fadc7&user=1017&avserie=12977", "utf-8");
String url = "https://rest2.bermanngps.cl/BermannRest/api/enviacomando?" + query;

我刚刚更改了与 URLEncoder 冲突的值。

    token?.let { tk ->
                        userId?.let { user ->
                            comando?.comandoComando?.let { it1 ->
                                mVehiculo?.let { it2 ->
                                    mViewModel.sendComando(
                                        tk = tk,
                                        avserie = it2.avSerie,
                                        user = user,
                                        comando = URLEncoder.encode(it1, "UTF-8"),
                                        md5pass = pass
                                    )
                                }
                            }
                        }
                    }

由于此方法不能始终如一地工作,我尝试使用@Url 发送请求。

不过,很多时候请求在“*”(星号)处中断