2015-03-30 10:32:48

HttpServletRequestWrapper 编码问题

当发现经过Wrapper后Spring setCharacterEncoding还乱码时,可以实现HttpServletRequestWrapper,重写public String[] getParameterValues(String name) {....}等方法,再Encoding已设了encoding。
/**
     * 获取应用层的编码方式,应用层Filter需要setCharacterEncoding避免乱码问题
     * 当getCharacterEncoding不为空那么就可以从RequestWrapper中获取转换编码
     * 后的字符串了
     * @param request
     * @return
     */
    public static String getCharacterEncoding(HttpServletRequest request){
    	String encoding = request.getCharacterEncoding();
    	return encoding != null ? encoding : "ISO8859-1";
    }
    /**
     * 避免Filter乱码问题,默认ISO8859-1,如果应用层setCharacterEncoding需要取出
     * setCharacterEncoding的编码方式
     * @param obj
     * @param encoding
     * @return
     */
    public static String[] encoding(String[] obj,String encoding){
		if (StringUtil.isNotEmpty(obj)) {
			if(!encoding.equalsIgnoreCase("ISO8859-1")){
				try {
					if (obj.length > 1) {
						List<String> ls = Arrays.asList((String[]) obj);
						String[] str = new String[ls.size()];
						for (int i = 0; i < ls.size(); i++) {
							str[i] = new String(ls.get(i).getBytes("ISO8859-1"),encoding);
						}
						return str;
					} else {
						return new String[] {new String(obj[0].getBytes("ISO8859-1"),encoding) };
					}
				} catch (UnsupportedEncodingException e) {
					logger.info(e.toString());
				}
			}else{
				return obj;
			}
		}
		return null;
    }
发表回复