【发布时间】:2011-11-09 20:27:28
【问题描述】:
好时机! 我的 Adroid 应用程序对 Google 的 API 服务之一执行 HTTP 请求。当然,当请求的参数是英文时,它可以工作,但是当我用西里尔字母测试我的函数时 - 我得到 400 错误。似乎是,问题是将 Win-1251 字符串编码为 UTF-8 ?如何在 Java 中完成?
【问题讨论】:
好时机! 我的 Adroid 应用程序对 Google 的 API 服务之一执行 HTTP 请求。当然,当请求的参数是英文时,它可以工作,但是当我用西里尔字母测试我的函数时 - 我得到 400 错误。似乎是,问题是将 Win-1251 字符串编码为 UTF-8 ?如何在 Java 中完成?
【问题讨论】:
试试:
URLEncoder.encode(yourString, HTTP.UTF-8);
【讨论】:
URLEncoder.encode(yourString, java.nio.charset.StandardCharsets.UTF_8.toString())
您应该使用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 时,您不需要这样做。
【讨论】:
Java 中的所有 String 对象都被编码为 Unicode (UTF-16)
和 Unicode 包括来自 Windows-1251 字符的字符
设置。
例如,“Česká”是“\u010Cesk\u00E1”。
如果您想将此字符串发送到其他使用不同的软件
字符集,那么您需要将字符串转换为字节
该字符集使用CharsetEncoder 类,或使用
类OutputStreamWriter 并传递Charset。
如果你从其他软件收到一个不同字符的字符串
设置然后使用类 CharsetDecoder 或 InputStreamReader
使用Charset 将其转换回Unicode。
【讨论】:
更新废弃参数:
import static java.nio.charset.StandardCharsets.UTF_8;
String pathEncoded = "";
try {
pathEncoded = URLEncoder.encode(path, UTF_8.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
【讨论】: