1. 中文乱码
Java中有些类对中文的支持可能有问题,例如在最近用 AndroidHttpClient API 解析 web url 时,通过 303 跳转返回的跳转 url 中包含了中文,但是中文部分显示为类似 ”街景总结这样的乱码,导致 url 无法访问,代码如下,其中的 location 文件名部分中包含了中文乱码:
final HttpClient client = AndroidHttpClient.newInstance("Android");
final HttpGet getRequest = new HttpGet(url.trim());
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
if (HttpStatus.SC_SEE_OTHER == statusCode) { //303跳转,从location字段中获取返回的跳转地址url
String location = response.getLastHeader("Location").getValue();
...
}
}
...
} catch (...) {
...
}
...
解决方法:先将乱码编码成 iso8859-1,然后再解码成 utf-8 即可
String location = response.getLastHeader("Location").getValue();
int nameIndex = location.lastIndexOf("/") + 1;
String name = new String(location.substring(nameIndex).getBytes("iso8859-1"), "utf-8"); //解码、编码
String locPre = location.substring(0, nameIndex);
location = locPre + name;
2. 中文编码成UTF-8
有时服务器对 URL 中的中文解码字符(即显示出中文)不支持,无法访问该 URL,而只支持编码成 UTF-8 后的的中文字符,比如 URL 文件名部分含有解码后中文字符,现在需要将其编码成 UTF-8 格式,可采用 URLEncoder.encode() 方法来解决:
int nameIndex = url.lastIndexOf("/") + 1;
String name = url.substring(nameIndex);
String urlPre = url.substring(0, nameIndex);
url = urlPre + URLEncoder.encode(name, "utf-8");