Servlet端
/**
* 将页面中传递过来的参数进行转码操作,避免出现中文乱码现象,此方法可泛型化
*/
private AdvertPosition transcoder(HttpServletRequest request){
AdvertPosition advertPosition = new AdvertPosition();
try {
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = "";
String targetString = "advertPosition.";
System.out.println("name="+name);
if(StringUtils.isNotBlank(name)){
//进行编码转换
value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8").trim();
BeanUtils.setProperty(advertPosition, name.substring(name.indexOf(targetString)+targetString.length()),value);
}
}
} catch (Exception e) {
logger.error("编码转换出现异常", e);
}
return advertPosition;
}
HTML中部分代码如下:
<tr>
<td class="td_label">广告位特征值:</td>
<td class="td_input">
<input id="eigenValue" name="advertPosition.eigenValue" type="text" class="e_input" οnfοcus="this.className='e_inputFocus'" οnblur="this.className='e_input'" value="${advertPosition.eigenValue}" maxlength="80" />
<input id="id" name="advertPosition.id" type="hidden" value="${advertPosition.id}"/>
</td>
<td class="td_label">广告位名称:</td>
<td class="td_input">
<input id="positionName" name="advertPosition.positionName" type="text" class="e_input" οnfοcus="this.className='e_inputFocus'" οnblur="this.className='e_input'" value="${advertPosition.positionName}" maxlength="80"/>
</td>
<td class="td_label">折扣:</td>
<td class="td_input">
<input id="discount" name="advertPosition.discount" value="${advertPosition.discount}" type="text" class="e_input" οnfοcus="this.className='e_inputFocus'" οnblur="this.className='e_input'" maxlength="80"/>
</td>
</tr>
思路,通过遍历参数列表中的值,对提交表单后传递到后台的所有参数进行转码操作。
注:此方式虽然能简化部分java代码,但代码整体运行效率会受到影响。
new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8").trim();
此种转码方式仅适用于通过firebug观察request请求参数中包含中文正常,而通过服务器端获取参数值出现乱码问题,如request请求参数中所包含的中文本身已出现乱码,请先尝试解决request中的乱码问题,再进行以上操作,具体firebug使用,请自行google