200分,谁能帮我解答一下这个乱码的问题,谢谢
http://www.blogjava.net/eamoi/archive/2005/12/05/22516.html
这个连接中两个页面都用的是gb2312编吗,我用的是gbk编码,所以两个页面,我都改gbk编码了,另外,我在web.xml设置了字码编码过滤器。不知道这个楼主是怎么设置的,估计没有设置。因为在第二页有转码形为。
问题是:
我在输入 "中国 "二字的时候,显示很正常,我输“利”这个字以后,就开始乱码,输入“利益 "二字,又很正常,当然还有其它不正常的现象,期待高人的出现.
------解决方案--------------------首先所有文件编码保持统一,要么都GB2312,要么都UTF-8;
然后提交数据都用escape()编码,接收数据都unescape()解码;
------解决方案--------------------貌似你只改了文件里的charset等设置,一个文件如果需要更换编码,除了设置里需要更改,这个文件还需要另存为相应的格式,如:gb2312,utf-8,unicode...
------解决方案--------------------如果是tomcat web 服务器,可以试试:
String username = new String(request.getParameter( "username ").getBytes( "GBK "), "UTF8 ");
---> > >
String username = new String(request.getParameter( "username ").getBytes( "ISO-8859-1 "), "UTF8 ");
------解决方案--------------------改成:
http_request.open( "POST ", url+ "? "+poststr, true);
alert(poststr);
http_request.setRequestHeader( "Content-Type ", "application/x-www-form-urlencoded ");
http_request.send();
另:
poststr = "username= "+encodeURI(f.username.value)+ "&password= "+f.password.value;
改成:
poststr = "username= "+encodeURIComponent(f.username.value)+ "&password= "+f.password.value;
------解决方案--------------------顶!
------解决方案--------------------pwd也得用encodeURIComponent进行转码.
------解决方案--------------------URL的长度是2K
------解决方案--------------------用户名和密码也是要放在ajax里传。
如果是异步,可以提交到一个隐藏的iframe.
------解决方案--------------------用户名和密码也不要放在ajax里传。
如果是异步,可以提交到一个隐藏的iframe.
------解决方案--------------------GBK需要大写,还有gb2312只是GBK的一个子集 不知道这样说能不能对你有一点帮组西药你能解决这个问题
------解决方案--------------------遇到这种问题最头痛了~顶一下
------解决方案--------------------顶
------解决方案--------------------帮顶
------解决方案--------------------..........
------解决方案--------------------就用字符串的getBytes( "ISO-8859-1 ")
------解决方案--------------------对中文而言,GBK是2字节编码,UTF8是3字节编码,
因此,输入 "利 "时,IE提交3字节的UTF8编码到服务器,request.getParameter( "username ")时按GBK编码把前两个字节转成一个汉字,剩下的一个字节怎么办呢,因为没有对应的编码,所以被编码成问号 "? "了,注意:这时候丢失信息了,后来的getBytes( "GBK ")已经没办法得到原来的编码了,再将其转换成字符串当然就会出现乱码了。
两个汉字时,6字节的UTF-8编码-》当成6字节的GBK编码-》3个汉字-》6字节的GBK编码-》当成6字节的UTF-8编码-》两个汉字。整个过程没有出错,虽然中间是乱码,但信息没丢失,所以最后的汉字是正确的。
解决办法:不要经过gbk编码。
以下为测试代码:
System.out.println( "利 ".getBytes( "UTF-8 ").length);//UTF-8编码长度
System.out.println( "利 ".getBytes( "UTF-8 ")[2]);//第三个字节的数据
System.out.println( "利 ".getBytes( "GBK ").length);//GBK-8编码长度
System.out.println(new String( "利 ".getBytes( "UTF-8 "), "GBK "));//UTF-8 -> GBK