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
System.out.println(new String( "利 ".getBytes( "UTF-8 "), "GBK ").getBytes( "GBK ")[2]);//第三个字节的数据
System.out.println(new String((new String( "利 ".getBytes( "UTF-8 "), "GBK ")).getBytes( "GBK "), "UTF-8 "));//UTF-8 -> GBK -> UTF-8
byte[] bytes = new String( "利 ".getBytes( "UTF-8 "), "GBK ").getBytes( "GBK ");
bytes[2]=-87;//重新改回原来的数据
System.out.println(new String(bytes, "UTF-8 "));
[解决办法]
把输出也贴出来了,省得麻烦
3
-87
2
鍒?
63
??
利
[解决办法]
帮顶,这个字符转换的确很是头疼,所有文件编码保持统一,希望楼主早日解决问题
[解决办法]
对中文而言,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
System.out.println(new String( "利 ".getBytes( "UTF-8 "), "GBK ").getBytes( "GBK ")[2]);//第三个字节的数据
System.out.println(new String((new String( "利 ".getBytes( "UTF-8 "), "GBK ")).getBytes( "GBK "), "UTF-8 "));//UTF-8 -> GBK -> UTF-8
byte[] bytes = new String( "利 ".getBytes( "UTF-8 "), "GBK ").getBytes( "GBK ");
bytes[2]=-87;//重新改回原来的数据
System.out.println(new String(bytes, "UTF-8 "));
______________________________________________________________-
原来如此