UTF-8非同期要求からgbkアプリケーションへの処理方法2


フロントエンドjsは、符号化されたhttp要求をgbkのバックグラウンドアプリケーションに送信し、この場合、符号化復号化の処理を行う必要がある.
のように
127.0.0.1:8080/xxx.xhtml?keywords=%E8%87%AA%E8%A1%8C%E8%BD%A6&encode=utf-8
Webアプリケーションがこのような要求を受け取ると、アプリケーションまたはサーバ上でgbk符号化のブロック処理がデフォルトで行う場合、requestが用いられる.getParameterでは文字化けしが発生し、復号後の中国語文字の最後の文字は復号できません.
解決方法:request.getQueryString()方式は、queryStringを取得した後、このurlパラメータを自分で再解析します.コードは以下の通りです.
        HttpServletRequest request ....;
        String encode = StringUtil.trimToNull(request.getParameter("encode"));
        // utf-8 
        if (StringUtil.isEqualsIgnoreCase(encode, "utf-8")) {
            
            // 
            if (request != null) {

                Enumeration parameterNames = request.getParameterNames();
                if(parameterNames!=null){
                    while (parameterNames.hasMoreElements()) {
                        String parameterName = parameterNames.nextElement().toString();
                        String parameterValue = StringUtil.trimToNull(request.getParameter(parameterName));
                        
                        if(parameterValue!=null){
						    //parameterValue = URLDecoder.decode(parameterValue, "UTF-8");
                        	try {
                        		// 
                        			String queryString = request.getQueryString();
                        			String[] querys = StringUtil.split(queryString, "&");
                        			if(querys!=null && querys.length > 0){
                        				for(String query : querys){
                        						parameterValue = StringUtil.substring(query, StringUtil.getLength(parameterName+"="));
                        						parameterValue = URLDecoder.decode(parameterValue, encode);// encode 
                        					}
                        				}
							} catch (UnsupportedEncodingException e) {
								// TODO Auto-generated catch block
							}
						}
                        // , 
                        if (!StringUtil.isEmpty(parameterValue)) {
                              request.setAttribute(parameterName, parameterValue);
                        }
                    }
                }
            }else {
            	// 
            	return false;
			}
            
        }

        return true;