Servlet查看提交表单数据乱码解决方法
问题描述
在html代码中,input的name设置为中文,采用utf-8编码,且在文本输入框中输入中文。
在控制台打印name和value均产生乱码
bug截图

html代码
<meta charset="UTF-8">
<tr>
<td><label for="user" >用户名</label></td>
<td><input type="text" name="用户名" id="user"></td>
</tr>
<tr>
<td><label for="pwd" >密 码</label></td>
<td><input type="password" name="密码" id="pwd"></td>
</tr>
<tr>
<td>性别</td>
<td><input type="radio" name="性别" checked>男<input type="radio" name="性别" >女</td>
</tr>
java代码
Map<String,String[]> stringMap = req.getParameterMap();
Set<String> keySet = stringMap.keySet();
for(String key:keySet){
String value=req.getParameter(key);
System.out.println("key:"+key+" , value:"+value);
}
浏览器界面截图

问题分析及解决
分析
该问题应该是解析request的编码和正确的编码不一致导致的
解决方案
方案1
通过new String(request.getBytes("iso-8859-1"),"utf-8");
代码模拟
//正常情况
String str="汉字";
byte[] b1=str.getBytes();
for(byte b:b1){
System.out.print(b);
}//-26-79-119-27-83-105
System.out.println(str);//汉字
//将相同的字符串以 iso-8859-1 编码存储,此时出现乱码
String str1=new String("汉字".getBytes("utf-8"),"iso-8859-1");
byte[] b2=str1.getBytes();
for(byte b:b2){
System.out.print(b);
}//-61-90-62-79-62-119-61-91-62-83-62-105
System.out.println(str1);//æ±å
//getBytes(String charsetName):
//使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] b3=str1.getBytes("iso-8859-1");
for(byte b:b3){
System.out.print(b);
}//-26-79-119-27-83-105
String str2=new String(str1.getBytes("iso-8859-1"),"utf-8");
System.out.println(str2);//汉字
解决方法
Map<String,String[]> stringMap = req.getParameterMap();
Set<String> keySet = stringMap.keySet();
for(String key:keySet){
String value=req.getParameter(key);
key=new String(key.getBytes("ISO-8859-1"),"utf-8");
value=new String(value.getBytes("ISO-8859-1"),"utf-8");
System.out.println("key:"+key+" , value:"+value);
}

方案2
req.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
Map<String,String[]> stringMap = req.getParameterMap();
Set<String> keySet = stringMap.keySet();
for(String key:keySet){
String value=req.getParameter(key);
System.out.println("key:"+key+" , value:"+value);
}


在控制台打印表单的name和value产生乱码
浙公网安备 33010602011771号