【问题标题】:how to set utf-8 encoding in retrofit android?如何在改造 android 中设置 utf-8 编码?
【发布时间】:2020-05-18 05:12:16
【问题描述】:

我使用@FormUrlEncoded 发送到服务器。当我向服务器发送字符串时,我得到这样的请求体

    Content-Length: 14
    Authorization: 
    nick=%E3%85%8A

所以我使用了 addInterceptor。 拦截器

        val requestBuilder = original.newBuilder()
            .addHeader("Authorization",token)
            .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
            .url(originalHttpUrl)

API接口

    @FormUrlEncoded
    @POST("nickCheck")
    fun checkNickName(
       @Fiel("nick") nick:  String
    ) :Call<NickCheckResultData>

但它没有用。英语和数字都可以,但不是我的语言。如何解决? 我也试过设置->文件编码->更改utf-8

【问题讨论】:

标签: android


【解决方案1】:

UTF-8 没有问题。

@FormUrlEncoded 注释意味着您发送的内容将被 URL 编码,这就是这里发生的情况。

当一个字符串是 url 编码时,它只会保持不变,在 url 中有效的字符,就像你正在观察“英语和数字都可以”。

您可以在 Android 文档 here 中阅读: “字母数字字符“a”到“z”、“A”到“Z”和“0”到“9”保持不变。”因为它们是 URL 中的有效字符。

但是韩语字符对于 url 无效,因此它们被编码(转换),这就是这里发生的情况。

您在服务器中要做的就是解码接收到的编码字符串。 例如在 PHP 中: urldecode("%E3%85%8A") 将产生您的原始字符串:"ㅊ"

您还可以删除注释@FormUrlEncoded 或使用带有@Body 注释的HTTP 请求正文发送数据。查看改造文档以获取有关如何操作的更多信息。

【讨论】:

  • 感谢您的回答。所以如果我想发送我的韩语,你的意思是没有办法发送文字字符并且服务器必须对此进行解码?
  • 可以,只是去掉@FormUrlEncoded注解,它不会编码你发送的内容
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 2017-03-08
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2013-01-18
  • 2015-01-02
相关资源
最近更新 更多