简单Servlet项目的中文乱码问题

写了一个简单的Servlet项目用来实现购物车功能,主要内容为:在jsp页面上获取复选框选中的商品,提交后返回一个页面显示所选的商品信息。
jsp页面展示
但是鲁迅说过,“bug总是无处不在的”。ORZ。

提交之后返回的页面总是出现中文乱码,不管怎么设置编码格式都毫无用处,该乱码的还是乱码。按道理来说,返回页面的编码格式已经被设置好了,是不会出现乱码的。那么问题只能存在于从request获取参数时就已经出现了编码的格式问题。

谷歌后得知,tomcat在POST请求提交时默认使用ISO-8859-1编码,因此,在取出参数时,必须进行一波转换编码格式的操作。这里就涉及到String类的一个非常低调的构造函数,

public String(byte[] bytes,String charsetName) 
       throws UnsupportedEncodingException

该构造函数的意思是以指定的编码格式编码byte[],构造字符串。

于是改动一下获取的字符串,

itemName = new String (itemsSelected[i-1].getBytes("iso-8859-1"),
                       "gb2312");  //取出商品名字

再重试,返回结果就正常了。

总结
  1. 关于post,get请求,tomcat默认使用iso-8859-1编码,当传递的参数为中文时,要进行编码格式的转化以获取正确的内容。
  2. 像Checkbox这种类型的Value,尽量使用数字,这样能够极大的降低参数传递时的乱码问题。如:
<p><input type = "Checkbox" name = "item" value = "1">糖果</p>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值