好时光! 我的Adroid应用程序对Google的其中一个API服务执行HTTP请求。当然,它的工作原理,当英语请求的参数,但当我用西里尔语测试我的功能 - 我得到400错误。似乎是,问题是将Win-1251字符串编码为UTF-8?如何在Java中完成?
答案 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
。
如果您从其他软件收到不同字符的字符串
然后设置使用课程CharsetDecoder
或InputStreamReader
使用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();
}