如何在Java中的HTTP请求中编码西里尔符号?

时间:2011-09-03 19:15:10

标签: java android utf-8 encode

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

4 个答案:

答案 0 :(得分:11)

尝试:

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

答案 1 :(得分:9)

您应该使用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时,您无需执行此操作。

答案 2 :(得分:2)

Java中的所有String个对象都编码为Unicode(UTF-16) 和Unicode包括Windows-1251字符中的字符 集。

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

如果要将此字符串发送到使用其他软件的其他软件 然后你需要将字符串转换为字节 使用类CharsetEncoder或使用的字符集 等级OutputStreamWriter并传递Charset

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

答案 3 :(得分:0)

更新所描述的参数:

import static java.nio.charset.StandardCharsets.UTF_8;

String pathEncoded = "";

try {

  pathEncoded = URLEncoder.encode(path, UTF_8.toString());

} catch (UnsupportedEncodingException e) {

  e.printStackTrace();
}