今天遇到一个bug,jsp以表单提交时会有中文乱码,情况如下
post表单如下
<form action="reader_edit_do_r.html" method="post" id="edit" >
<div class="input-group">
<span class="input-group-addon">读者证号</span>
<input type="text" readonly="readonly" class="form-control" name="readerId" id="readerId" value="${readerinfo.readerId}">
</div>
<div class="input-group">
<span class="input-group-addon">姓名</span>
<input type="text" class="form-control" name="name" id="name" value="${readerinfo.name}" >
</div>
<div class="input-group">
<span class="input-group-addon">性别</span>
<input type="text" class="form-control" name="sex" id="sex" value="${readerinfo.sex}" >
</div>
<div class="input-group">
<span class="input-group-addon">生日</span>
<input type="text" class="form-control" name="birth" id="birth" value="${readerinfo.birth}" >
</div>
<div class="input-group">
<span class="input-group-addon">地址</span>
<input type="text" class="form-control" name="address" id="address" value="${readerinfo.address}" >
</div>
<div class="input-group">
<span class="input-group-addon">电话</span>
<input type="text" class="form-control" name="telcode" id="telcode" value="${readerinfo.telcode}" >
</div>
<br/>
<input type="submit" value="确定" class="btn btn-success btn-sm" class="text-left">
<script>
function mySubmit(flag){
return flag;
}
$("#edit").submit(function () {
if($("#name").val()==''||$("#sex").val()==''||$("#birth").val()==''||$("#address").val()==''||$("#telcode").val()==''){
alert("请填入完整图书信息!");
return mySubmit(false);
}
})
</script>
</form>
后台代码如下:
readerInfo.setAddress(address);
readerInfo.setBirth(nbirth);
readerInfo.setName(name);
readerInfo.setReaderId(readerId);
readerInfo.setTelcode(telcode);
readerInfo.setSex(sex);
造成这种情况的原因:由于浏览器在post提交的时候采用的是ISO-8859-1的方式进行提交,因此我们就需要将username的getBytes()的编码方式设置为ISO-8859-1.。
解决方案
readerInfo.setAddress(new String(address.getBytes("ISO-8859-1"),"UTF-8"));
readerInfo.setName(new String(name.getBytes("ISO-8859-1"),"UTF-8"));
readerInfo.setSex(new String(sex.getBytes("ISO-8859-1"),"UTF-8"));
readerInfo.setReaderId(readerId);
readerInfo.setTelcode(telcode);
readerInfo.setBirth(nbirth);
问题成功解决