中文乱码解决及中文编码成UTF8

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");








发布了34 篇原创文章 · 获赞 7 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章