【发布时间】:2021-11-13 16:46:42
【问题描述】:
当我使用常规 HttpURLConnection 和 BufferedReader 时,我得到的只是纯 unicode 文本,结果为 String:
val url = URL(urlStr)
val response = StringBuilder()
val con: HttpURLConnection = url.openConnection() as HttpURLConnection
con.setRequestProperty("User-Agent", "Mozilla/5.0")
val bufferedReader = BufferedReader(InputStreamReader(con.inputStream))
var inputLine: String?
while (bufferedReader.readLine().also { inputLine = it } != null) {
response.append(inputLine)
}
bufferedReader.close()
return response.toString()
我尝试使用ScalarsConverterFactory 将此请求迁移到Retrofit,并从我的改造服务方法中获取字符串。这个解决方案的问题是,现在来自 Retrofit 的结果字符串是 url 编码的(如 "%C2 %96"):
@Headers("User-Agent: Mozilla/5.0")
@GET("single?client=gtx&dt=t")
suspend fun getTranslation(
@Query("sl") sourceLanguage: String,
@Query("tl") targetLanguage: String,
@Query("q") text: String,
): String
我尝试使用URLDecoder,但收到URLDecoder: Illegal hex characters in escape (%) pattern 错误。
- 为什么 Retrofit 返回 url 编码的字符串?
- 我应该如何正确解码这个字符串以避免错误?
- 我怎样才能改变这种行为,只得到普通(未编码)的字符串,比如
HttpURLConnection?
【问题讨论】:
标签: android retrofit2 httpurlconnection urlencode