在搞爬虫时,有时会遇到url中含有中文字符,请求会出错,那么就需要对含有中文的url进行转码。

以下,以科学网为例,如下图所示:

可以看到,url中含有中文,如下写了一个样例程序,将url中对应的中文进行转码,而其他不进行转码。

package collectip;


import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
 * author:合肥工业大学 管院学院 钱洋 
 *1563178220@qq
 *博客地址:http://blog.csdn/qy20115549/
*/
public class UrlUtil {
    private final static String ENCODE = "GBK"; 
    public static String getURLEncoderString(String str) {
        String result = "";
        if (null == str) {
            return "";
        }
        try {
            result = java.URLEncoder.encode(str, ENCODE);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "blog.php?mod=member&type=管理科学和管理思想史&realmmedium=管理科学与工程&realm=管理综合&catid=565";
        //中文正则匹配
        Pattern p = Patternpile("([\u4e00-\u9fa5]+)");    
        Matcher m = p.matcher( str );    
        String mv = null;  
        List<String> list=new ArrayList<String>();
        while (m.find()) {    
           mv = m.group(0);    
           list.add(getURLEncoderString(mv));    
        } 
        String url=" http://blog.sciencenet/blog.php?mod=member&type="+list.get(0)+"&realmmedium="+list.get(1)+"&realm="+list.get(2)+"&catid=565";
        System.out.println(url);

    }
}

转码后对应的url为:

http://blog.sciencenet/blog.php?mod=member&type=%B9%DC%C0%ED%BF%C6%D1%A7%BA%CD%B9%DC%C0%ED%CB%BC%CF%EB%CA%B7&realmmedium=%B9%DC%C0%ED%BF%C6%D1%A7%D3%EB%B9%A4%B3%CC&realm=%B9%DC%C0%ED%D7%DB%BA%CF&catid=565

针对这个url,就可以去使用httpclient等工具进行请求了。

更多推荐

网络爬虫之Url含有中文如何转码