写了一个简单的Servlet项目用来实现购物车功能,主要内容为:在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"); //取出商品名字
再重试,返回结果就正常了。
总结
- 关于post,get请求,tomcat默认使用iso-8859-1编码,当传递的参数为中文时,要进行编码格式的转化以获取正确的内容。
- 像Checkbox这种类型的Value,尽量使用数字,这样能够极大的降低参数传递时的乱码问题。如:
<p><input type = "Checkbox" name = "item" value = "1">糖果</p>