今天用myeclipse写了一个简单的调用request对象方法的小demo,其中需要写个含多种格式表单的Html文件,写好测试时发现无论是在火狐还是360浏览器,显示的都是乱码,在网上找了很多解决办法,最简单的是把html页面里的charset=utf-8改为charset=gb2312,但是我的myeclipse里所有文件的编码都是utf-8,这就让我很疑惑为什么使用使用gb2312就没问题了?而且这种方法治标不治本,发布到国外肯定又乱码。还悲催的发现,获取到的数据只要是中文的就是乱码的,比如用户名。先记录下这个问题,找到原因再来补充。
补充1:对于获取到的数据只要是中文就乱码的问题,原因是request对象将字节流转成字符串时,查的是isso8859-1码表,而浏览器传给它的是浏览器被设置使用的码表(常是utf-8),所以自然会出错。解决办法是在servlet获取request对象保存的对象前加上:request.setCharacterEncording("UTF-8");//此法只适用于post方法。
如果是get方法,可以在拿到request对象后,再用isso8859-1编码查一遍,即:
byte data[]=username.getBytes("isso8859-1");//拿到浏览器传过来的原始字节流。
username=new String (data,"UTF-8");//此时再用UTF-8编译就没问题了。
在网上还看到种说法:myeclipse建立html5的html页面会用html5的标准在meta头部直接用name参数名而且html1-4都是利用http-equiv来做参数名所以导致不支持html5标准的浏览器出现无法读取charset=utf-8而出现乱码。
不太理解,也不知道对不对。