【发布时间】:2020-10-20 17:25:56
【问题描述】:
在我的应用程序中,我使用 Retrofit+Gson 与服务器通信。但是,服务器响应存在编码问题。
在 OkHttp 日志拦截器中,服务器响应如下所示,可以:
... "name":"S\u0026#39;mores" ...
这是服务器响应 JSON 的一部分。当响应被 Gson 反序列化后,反序列化后的字符串如下所示:
S'mores
我想知道反序列化过程中发生了什么以及如何正确编码字符串。
下面是我的改造初始化代码:
val client = OkHttpClient.Builder()
.addInterceptor(
HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY)
)
mRetrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client.build())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.addConverterFactory(GsonConverterFactory.create())
.build()
mAPI = mRetrofit.create(PetfinderJSONAPI::class.java)
我尝试了什么:
- 设置
gson.disableHtmlEscaping()并将其传递给GsonConverterFactory.create() - 添加设置
Accept-Charset: utf-8的OkHttp拦截器 - 通过
URLDecoder.decode()和Html.fromHtml()在将字符串设置为文本字段之前手动解码字符串
这些都没有帮助。我的字符串仍未正确编码。
编辑:根据this html 解码器站点,' 被解码为'。因此,我希望我的解码字符串是S'mores
【问题讨论】:
标签: android json gson retrofit okhttp