服务器传递中文乱码问题

Scaarf 2017-12-11 11:21:48
Servlet之间传递中文数据乱码,网上的方法都试了一遍,还是不行,这里MyServlet向OtherServlet传递数据
这个是MyServlet

System.out.println("进入MyServlet......");
String aa="aaa号";
String aa2="aaa2号";
resp.sendRedirect("/ServletTest/bbb?aa="+aa+"&aa2="+aa2+"&username2=张三LISI");


这是OtherServlet

resp.setHeader("content-type", "text/html;charset=utf-8");
resp.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
System.out.println("进入OtherServlet......");
System.out.println("转换编码前......");
String aa=req.getParameter("aa");
String username2=req.getParameter("username2");
String aa2=req.getParameter("aa2");
System.out.println("aa2="+aa2);
System.out.println("username2="+username2);
System.out.println("aa="+aa);

System.out.println("转换编码后......");
String s1=new String(req.getParameter("username2").getBytes("ISO-8859-1"),"UTF-8");
String s2=new String(req.getParameter("aa").getBytes("ISO-8859-1"),"GB2312");
String s3=new String(req.getParameter("aa2").getBytes("ISO-8859-1"),"UTF-8");
System.out.println("username2="+s1);//还是乱码
System.out.println("aa="+s2);//还是乱码
System.out.println("aa2"+s3);//还是乱码

req.setAttribute("aa", aa);
req.setAttribute("aa2", aa2);
req.setAttribute("username2", "你好撒飒飒");
req.getRequestDispatcher("/index.jsp").forward(req, resp);


server.xml中也加了 URIEncoding="UTF-8",还是不行,中文编码过滤器也加了还是不行。。。。。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
...全文
335 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Scaarf 2017-12-11
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
用于urldecode解码 Redirect是先传递给浏览器,再由浏览器发起新的请求。你给浏览器的时候已经是utf-8(你的项目使用的字符集),浏览器会urlencode编码后请求。你只要做urldecode就可以了。
我加了下面代码后还是不行啊,还是乱码

		String ss1=java.net.URLDecoder.decode(req.getParameter("username2"), "UTF-8");
		System.out.println("ss1="+ss1);//结果中文还是乱码,中文全是问号。。。。。。
computerclass 2017-12-11
  • 打赏
  • 举报
回复
全部编码统一试试,也有可能是服务器的编码不一致 resp.sendRedirect("/ServletTest/bbb?aa="+aa+"&aa2="+aa2+"&username2=张三LISI");
tianfang 2017-12-11
  • 打赏
  • 举报
回复
用于urldecode解码 Redirect是先传递给浏览器,再由浏览器发起新的请求。你给浏览器的时候已经是utf-8(你的项目使用的字符集),浏览器会urlencode编码后请求。你只要做urldecode就可以了。
Scaarf 2017-12-11
  • 打赏
  • 举报
回复
引用 6 楼 tianfang 的回复:
[quote=引用 3 楼 Scaarf 的回复:] [quote=引用 1 楼 tianfang 的回复:] 用于urldecode解码 Redirect是先传递给浏览器,再由浏览器发起新的请求。你给浏览器的时候已经是utf-8(你的项目使用的字符集),浏览器会urlencode编码后请求。你只要做urldecode就可以了。
我加了下面代码后还是不行啊,还是乱码

		String ss1=java.net.URLDecoder.decode(req.getParameter("username2"), "UTF-8");
		System.out.println("ss1="+ss1);//结果中文还是乱码,中文全是问号。。。。。。
[/quote] 你在什么系统下打印的?支持中文吗 把username2的值也打印出来,乱码的话 转成16进制打印出来 sendRedirect 时候,你主动urlencode 中文字符串 [/quote] 解决了,非常感谢。原来要在sendRedirect 之前encode......之前一直在下一个Servlet中encode和decode。。。。。。。
tianfang 2017-12-11
  • 打赏
  • 举报
回复
引用 3 楼 Scaarf 的回复:
[quote=引用 1 楼 tianfang 的回复:] 用于urldecode解码 Redirect是先传递给浏览器,再由浏览器发起新的请求。你给浏览器的时候已经是utf-8(你的项目使用的字符集),浏览器会urlencode编码后请求。你只要做urldecode就可以了。
我加了下面代码后还是不行啊,还是乱码

		String ss1=java.net.URLDecoder.decode(req.getParameter("username2"), "UTF-8");
		System.out.println("ss1="+ss1);//结果中文还是乱码,中文全是问号。。。。。。
[/quote] 你在什么系统下打印的?支持中文吗 把username2的值也打印出来,乱码的话 转成16进制打印出来 sendRedirect 时候,你主动urlencode 中文字符串
computerclass 2017-12-11
  • 打赏
  • 举报
回复
比如 tomcat 中文乱码
Scaarf 2017-12-11
  • 打赏
  • 举报
回复
引用 2 楼 computerclass 的回复:
全部编码统一试试,也有可能是服务器的编码不一致 resp.sendRedirect("/ServletTest/bbb?aa="+aa+"&aa2="+aa2+"&username2=张三LISI");
怎么统一编码......可以详细说一下么

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧