系统windowsXP
JDK1.5.06
tomcat5.5.12我在jsp页面设置字符编码为:
<%@ page contentType="text/html; charset=utf-8"%>
设置tomcat默认发送字符编译设为
URIEncoding="utf-8"加过滤器为
if (httpServletRequest.getMethod().equals("POST")) {
request.setCharacterEncoding("UTF-8");
} else if (httpServletRequest.getMethod().equalsIgnoreCase("GET")) {
try {
String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
System.out.println("过滤器=>>" + sex);
} catch (Exception e) {}
}上面的String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");这句换成过其化编也都是出现乱码(iso-8859-1,gbk,gb2312)全部同样。乱码现象,如果是单数的中文最后一个中文变成?,如果是双数中文则正常。
求各位高手帮忙.
JDK1.5.06
tomcat5.5.12我在jsp页面设置字符编码为:
<%@ page contentType="text/html; charset=utf-8"%>
设置tomcat默认发送字符编译设为
URIEncoding="utf-8"加过滤器为
if (httpServletRequest.getMethod().equals("POST")) {
request.setCharacterEncoding("UTF-8");
} else if (httpServletRequest.getMethod().equalsIgnoreCase("GET")) {
try {
String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
System.out.println("过滤器=>>" + sex);
} catch (Exception e) {}
}上面的String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");这句换成过其化编也都是出现乱码(iso-8859-1,gbk,gb2312)全部同样。乱码现象,如果是单数的中文最后一个中文变成?,如果是双数中文则正常。
求各位高手帮忙.
post则正常
为何转来转去呀
和 request.getParameter("sex")是一样的呀
new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
为何转来转去呀
和 request.getParameter("sex")是一样的呀
上面我提到的转码方式我都试过了,一直都不好使。
直接用request.getparamter("sex")是一样的,我知道。不过就是有病乱投医了。
new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
为何转来转去呀
和 request.getParameter("sex")是一样的呀你还没有说如何来解决tomcat5这个问题呢。
String sex = new String((request.getParameter("sex")).getBytes("ISO-8859-1"),"UTF-8");
to: 回复人: TinyJimmy(Jimmy) ( ) 信誉:105 2006-02-06 19:31:00 得分: 0
Get 方法是固定使用8859-1编码, 楼上是对的
你是说get方法一定就是iso-8859-1编码吗?那么我把tomcat设置成utf-8,页面设置为utf-8会出错吗?用楼上的方法进行转换?同样还是乱码的。
doFilter()里执行
request.setCharacterEncoding("UTF-8");然后在具体需要取参数的 jsp 或者 servlet 里,
简单采用 request.getParameter("sex");试试看?
请帮忙再试一下。
然后在目标页面中使用java.netURLDecoder.decode(request.getParameter("str"), "utf-8");就可以了。不过如果是用户输入,就没办法转码了。
你可以把某几个汉字的各种编码用GBK显示出来,然后再把实验得到的乱码和这些对照,就猜出她到底是怎么编码的了。你这种出现半个汉字的情况我好像遇到过。就是当你页面写的是utf-8,但其实际编码并不是utf-8的时候就会出现。印象中啊。你可以通过IDE修改页面编码(页面本身的编码,而不是写在顶端的那句话)。
String sex = new String(request.getParameter("str").getBytes(“ISO-8859-1”));
应该可以了。
还没有试过。一会试试看。to: kingfish(龙城) ( ) 信誉:115 2006-2-7 15:21:00 得分: 0
这么多方法还不行的话就如楼上所说把request.getParameter取出来的比较一下,看看是什么编码取出来如何比较编码呢?
String s = "中国";
s.getbyte("iso-8859-1")
s.getbyte("gbk")这样与request.getParameter("")进行比较吗?
回复人: kingfish(龙城) ( ) 信誉:115 2006-2-7 15:21:00 得分: 0
这么多方法还不行的话就如楼上所说把request.getParameter取出来的比较一下,看看是什么编码我的作法如下:页面编码为utf-8,tomcat为URIEncoding="utf-8"System.out.println("直接取=>"+request.getParameter("sex"));
System.out.println("UTF-8=>" + new String(request.getParameter("sex").getBytes("utf-8")));
System.out.println("gbk=>"+new String(request.getParameter("sex").getBytes("gbk")));
System.out.println("iso-8859-1=>"+new String(request.getParameter("sex").getBytes("iso-8859-1")));
System.out.println("gb2312=>"+new String(request.getParameter("sex").getBytes("gb2312")));所得结果如下:
直接取=>?
UTF-8=>锟?
gbk=>?
iso-8859-1=>?
gb2312=>?把URIEncoding="utf-8"换成iso-8859-1结果如下:
直接取=>??
UTF-8=>莽聰
gbk=>??
ISO-8859-1=>鐢
gb2312=>??
iso8859-1=>鐢把URIEncoding="utf-8"换成URIEncoding="gbk"结果如下:
直接取=>鐢
UTF-8=>閻?
gbk=>鐢
ISO-8859-1=>?
gb2312=>?
iso8859-1=>?
以上的做法应该是说明我的编码方式为gbk,而非我设成tomcat的utf-8或iso-8859-1编码方式。
那么我该如何来改正。
一会把页面设成gbk去试试。期待大家关注此贴一下
此贴说tomcat会采用"fast conversion 來處理",我现在也在tomcat中加入了URIEncoding="ISO-8859-1"
,可现在出现上面所说的问题。
重申:
tomcat5.5.12
winXP
页面编码为utf-8
用下面的朋友答复的方法解决的。再此表示感谢。同时多谢各位对此贴的关注。
回复人: hamburger1981(曾经的汉堡包) ( ) 信誉:100 2006-02-07 19:28:00 得分: 0
碰到过这个问题,应该是Tomcat的问题,
String sex = new String(request.getParameter("str").getBytes(“ISO-8859-1”));
应该可以了。另外请哪位解释一下为什么。
我的tomcat设置成iso-8859-1编码,页面用utf-8,之后我用
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"utf-8");
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"iso-8859-1");
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gbk");
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gb2312");
都试过,全是不可用。乱码。
为什么用 new String(request.getParameter("str").getBytes(“ISO-8859-1”));
便可以呢?请再解释一下tomcat编码与页面和我接收转换编码之间的三者关系。谢谢。
分不够我可以用我的另一个号开200分相送。
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"iso-8859-1");
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gbk");
new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gb2312");
都试过,全是不可用。乱码。
为什么用 new String(request.getParameter("str").getBytes(“ISO-8859-1”));
便可以呢?
-----------------------------------------------
了解编码解码的原理就可以了。
“汉字”->1234(用utf-8编码)->“乱码”(用iso解码)->1234(用iso编码)->“汉字”(用utf-8解码)
new String(request.getParameter("str").getBytes(“ISO-8859-1”));使用平台默认字符集进行解码。也就是说,你的str使用的是你系统默认字符集进行编码的。而这个字符集不同于gbk,utf-8,gb2312和gbk。
转成默认的file.encoding, 其他则转成指定的编码