【问题标题】:How to encode cyrillic symbols in HTTP-requests in Java?如何在 Java 的 HTTP 请求中编码西里尔符号?
【发布时间】:2011-11-09 20:27:28
【问题描述】:

好时机! 我的 Adroid 应用程序对 Google 的 API 服务之一执行 HTTP 请求。当然,当请求的参数是英文时,它可以工作,但是当我用西里尔字母测试我的函数时 - 我得到 400 错误。似乎是,问题是将 Win-1251 字符串编码为 UTF-8 ?如何在 Java 中完成?

【问题讨论】:

    标签: java android utf-8 encode


    【解决方案1】:

    试试:

    URLEncoder.encode(yourString, HTTP.UTF-8);
    

    【讨论】:

    • 弃用(UTF-8
    • 使用URLEncoder.encode(yourString, java.nio.charset.StandardCharsets.UTF_8.toString())
    【解决方案2】:

    您应该使用URLEncoder#encode() 对请求参数进行编码。

    String query = "name1=" + URLEncoder.encode(value1, "UTF-8")
                + "&name2=" + URLEncoder.encode(value2, "UTF-8")
                + "&name3=" + URLEncoder.encode(value3, "UTF-8");
    
    String url = "http://example.com?" + query;
    // ...
    

    请注意,参数名称实际上也应该是 URL 编码的,但是在这个特定的示例中,它们都已经有效。另请注意,当您使用 Android 的内置 HttpClient API 时,您不需要这样做。

    【讨论】:

    • 是的,感谢您提供详细信息,尤其是关于 Android 的 HttpClient
    【解决方案3】:

    Java 中的所有 String 对象都被编码为 Unicode (UTF-16) 和 Unicode 包括来自 Windows-1251 字符的字符 设置。

    例如,“Česká”是“\u010Cesk\u00E1”。

    如果您想将此字符串发送到其他使用不同的软件 字符集,那么您需要将字符串转换为字节 该字符集使用CharsetEncoder 类,或使用 类OutputStreamWriter 并传递Charset

    如果你从其他软件收到一个不同字符的字符串 设置然后使用类 CharsetDecoderInputStreamReader 使用Charset 将其转换回Unicode。

    【讨论】:

      【解决方案4】:

      更新废弃参数:

      import static java.nio.charset.StandardCharsets.UTF_8;
      
      String pathEncoded = "";
      
      try {
      
        pathEncoded = URLEncoder.encode(path, UTF_8.toString());
      
      } catch (UnsupportedEncodingException e) {
      
        e.printStackTrace();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        • 2019-06-18
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多